Как найти количество двузначных чисел в строке

0 / 0 / 0

Регистрация: 14.02.2020

Сообщений: 11

1

Найти количество двухзначных чисел в строке.

01.03.2020, 19:19. Показов 1640. Ответов 2


Студворк — интернет-сервис помощи студентам

Дан массив символьных строк. Найти количество двухзачных чисел. Числа в строках лежат в пределах от -10000 до 10000.

Формат ввода:

В первой строке – количество элементов массива не превосходящее 100. На второй и последующих строках элементы массива.

Формат вывода:

Целое число.

Пример входных данных

3
abc1fk8
b 12 c
ab8 2k
Пример выходных данных

1



0



ValentinNemo

2373 / 775 / 561

Регистрация: 15.01.2019

Сообщений: 2,394

02.03.2020, 03:51

2

Программа получилась не изящная.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
program sd;
 
uses
  crt;
const
  maxelem = 100;
var
  ast: array [1..maxelem] of string;
  s,sp: string;
  i,j,k,k1, code, count, n: integer;
  flag: boolean;
Begin
  count:= 0;
  readln(n);
  for i:= 1 to n do
    Readln(ast[i]);
  for i:= 1 to n do
    begin
      s:= ' ' + ast[i] + '  ';
      for j:= 2 to length(s)-1 do       { проверяем каждый символ до конца строки }
        begin
          flag:= false;
          sp:= '';
          if (s[j] in ['0'..'9']) and    { Если 1-ый проверяемый символ это цифра }
             (s[j+1]  in ['0'..'9']) and  { и 2-ой проверяемый символ это цифра }
              not (s[j+2] in ['0'..'9']) then  { и 3-ий проверяемый символ это не цифра}
             begin
               if s[j-1] = '-' then  { проверяем, есть ли перед 1-м символом символ "-"}
                 begin
                   sp:= copy(s,j-1,3);          { если они есть, то копируем 3 символа}
                   flag:= true;
                 end
               else
                 if not (s[j-1] in ['0'..'9']) then { проверяем, есть ли перед 1-м символом нет цифр}
                   begin
                     sp:= copy(s,j,2); { если их нет, то копируем 2 символа}
                     flag:= true;
                   end;
             end;
          if flag then
            begin
              val(sp,k,code);   {преобразуем скопированную строку к числовому представлению }
              if code = 0 then   { если преобразование прошло успешно то }
                begin
                  flag:= false;
                  { проверяем входит ли полученное число в заданный диапазон двузначных чисел}
                  if ((k > 9) and (k < 100) and  (k <> 0)) or ((k < -9) and (k > -100) and (k <> 0)) then
                    begin
                     { k1:= k;
                      write(k1:5);} {эти строки нужны для контроля работы программы}
                      inc(count);  { подсчитываем количество найденных чисел}
                    end;
                end;
            end;
        end;
      writeln;
    end;
  writeln(count);
  Readln;
End.



0



Cyborg Drone

Модератор

9584 / 4905 / 3243

Регистрация: 17.08.2012

Сообщений: 15,328

05.03.2020, 22:13

3

Программа получилась не изящная.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const
  d: set of char = ['0'..'9'];
var
  i, n, k: longint;
  s: string;
begin
  readln(n);
  for n := 1 to n do
    begin
      readln(s);
      s := ' ' + s + ' ';
      for i := length(s) - 1 downto 2 do
        if not (s[i - 1] in ['0'..'9']) then
          while s[i] = '0' do
            delete(s, i, 1);
      for i := 3 to length(s) do
        if not (s[i - 3] in d) and
           (s[i - 2] in d - ['0']) and
           (s[i - 1] in d) and
           not (s[i] in d) then inc(k)
    end;
  writeln(k)
end.

Добавлено через 14 минут
Вариант:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  i, n, k, p: longint;
  s: string;
begin
  readln(n);
  for n := 1 to n do
    begin
      readln(s);
      s := ' ' + s + ' ';
      for i := length(s) - 1 downto 2 do
        if not (s[i - 1] in ['0'..'9']) then
          while s[i] = '0' do
            delete(s, i, 1);
      for i := 2 to length(s) do
        if s[i] in  ['0'..'9'] then inc(p)
        else
          begin
            if p = 2 then inc(k);
            p := 0
          end
    end;
  writeln(k)
end.



0



Программа должна находить в строках двузначные числа, и считать количество таких строк

примеры строк:

  1. shsjkdfjsfeoi43jlskd
  2. lkfjsd234kjiel
  3. jwernmoa43skj3
  4. jklwen34kje

соответственно таких строки три (1,3,4)

Я начал писать, но оно не работает даже для одной строки, как сделать правильно?

#include <string>
#include <iostream>

int main()
{
using namespace std;
string strSample("thisfuckingshitstring45");
cout << "The string:" << endl;
cout << strSample << endl << endl;
int j;
//searching substring
string Num[90] = { "11", "12", "13", "14", "15", "16", "17", "18", "19",
    "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
    "30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
    "40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
    "50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
    "60", "61", "62", "63", "64", "65", "66", "67", "68", "69",
    "70", "71", "72", "73", "74", "75", "76", "77", "78" "79",
    "80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
    "90", "91", "92", "93", "94", "95", "96", "97", "98", "99" };
for (j = 0; j < 90; ++j)
{
    size_t charPos = strSample.find(Num[j], 0);
}
    //chekcing search result
    //if (charPos != string::npos)
    //cout << "First instance of "<< Num[j] << " was found at position " << charPos;
    //else cout << "Substring not found." << endl;

    //cout << endl << endl;

    //cout << "loc all substing inc "<< Num[j] << endl;

    size_t SubstingPos = strSample.find(Num[j], 0);

while (SubstingPos != string::npos)
{
    for (j = 0; j < 89; ++j){
    cout << Num[j]<<" found at pos" << SubstingPos << endl;
    size_t nSearchPosition = SubstingPos + 1;
    SubstingPos = strSample.find(Num[j], nSearchPosition);
    }
}

cout << endl;
return 0;

Asked
3 years, 2 months ago

Viewed
476 times

I need to count the number of lines in any data file I input. The file can be any .txt file with a two-digit number on each line.

How can I make this work with any data file, not just one specific one? How do I convert the file into a string and then store it in a variable? And does this mean I just have to count the number of lines in the file?

#to open the file
file = input('Please enter the file name: ')
file = open(file, 'r')

#to display name of the assignment
    for assignment in file: 
    print('Results for', assignment)
    break

asked Feb 24, 2020 at 14:17

4

To count lines in file do:

with open(file) as f:
    print(len(f.readlines()))

readlines will read file into a list of lines, len will get length of that list and finally print will print it out

But it is a naive solution with memory consumption O(n) where n is count of lines in file.
Better do that:

i = 0
with open(file) as f:
    for line in f:
        i += 1

answered Feb 24, 2020 at 14:20

Pavel Shishmarev's user avatar

2

count = 0
with open(file) as tests:
        for curline in tests: #for each line
            count+=1 #add int of line to total
print(count)

this is untested but something like this may work? looping through each line
converting it to an integer and appending a total

file must be the path to your file or the filename if its in the same directory as your python file. must be a string such as “testfile.txt” or “./files/myfile.txt”

if you are summing then change count to

count+=int(curline)

answered Feb 24, 2020 at 14:20

Charlie's user avatar

1

fghjgtsghf fdrjhs



Ученик

(95),
закрыт



7 лет назад

Ввести строку и найти среднее арифметическое всех двузначных чисел в строке / pascal
Помогите пожалуйста написать программу!

Алексей Корсунов

Гуру

(3113)


7 лет назад

Program DoSs;
var
k,s,i:integer;
n:real;
a:array[1..15] of integer;
Begin
for i:=1 to 15 do
begin
a[i] := random(1000);
write(a[i], ‘ ; ‘);
end;
for i:=1 to 15 do
if (a[i]>99) and (a[i]<999) then begin
k:=k+1;
s:=s+a[i];
end;
n:=s/k;
writeln(‘Среднееарифметичесоке двузначных чисел ‘,n);
end.

Формулировка задачи:

Дан массив вещественных чисел A, содержащий N элементов. Подсчитать
указанное значение для определенных элементов массива: количество двузначных чисел.
Примечание. Количество элементов N необходимо вводить с клавиатуры. Элементы мас-
сива A[i] необходимо сгенерировать в диапазоне от -15 до 15

Код к задаче: «Подсчитать количество двузначных чисел»

textual

Random rnd = new Random();
int[] arr = new int[10];
for (int i = 0; i < arr.Length; i++)
    arr[i] = rnd.Next(-15, 16);
int count = arr.Where(x => (Math.Abs(x) >= 10 && x <= 99)).Count();

Полезно ли:

13   голосов , оценка 4.000 из 5

Добавить комментарий