Как посчитать количество чисел в файле (состоящем только из натуральных чисел) в С++
Как мне считать из файла числа в какой-нибудь массив char или string так, чтобы я мог посчитать кол-во этих чисел (например «2», «324» «11» и любого другого числа). Функция sizeof или метод size() не работают. Не могли бы вы предложить какую-нибудь конструкцию, идею как это можно реализовать.
Отслеживать
222k 15 15 золотых знаков 120 120 серебряных знаков 234 234 бронзовых знака
задан 13 дек 2021 в 20:24
25 6 6 бронзовых знаков
Вас интересуют цифры или числа?
13 дек 2021 в 20:35
Какая-то путаница. Вы понимаете разницу между цифрой и числом?
13 дек 2021 в 20:37
Числа, извиняюсь
14 дек 2021 в 10:12
Если нужно считать все числа из файла, то можно просто загонять их, например, в вектор. Если нельзя использовать конейнеры, то можно реализовать самому логику увеличения размера массива. Если же просто нужно узнать количество чисел в файле, то можно просто читать по одному числу и считать их количество.
– user361068
14 дек 2021 в 10:20
Число чисел в файле состоящем только из чисел и простых разделителей скорее всего равно числу разделителей + 1.
Количество чисел в строке
Написать программу на c++ в с стиле с++ (не си) программу которая подсчитывает количество и цифры, и числа в строке. Я только знаю как подсчитывать цифры в строке, как написать что бы виделись так же и целочисленный числа?
#include #include using namespace std; int main() Лом Можно, с некоторыми оговорками, например, так:
#include #include #include using namespace std; int main() < string str; int s = 0; cout cout 0) < s = 0; long num; while (!iss.eof()) < iss >> num; s++; > > cout
Лом А если уж совсем по хардкорному, то так:
#include #include #include using namespace std; int main() < string str; cout cout
Лом Я тут еще подумал над задачкой и родился вариант более оптимальный, чем первый:
size_t d = 0, // количество цифр n = 0; // количество чисел bool in_digit = false; for (unsigned int i = 0; i < str.length(); i++) < if (isdigit(str[i])) < d++; if (!in_digit) < n++; in_digit = true; >> else < in_digit = false; >>
И проверил эти три реализации по скорострельности. Visual Studio 2017 Community.
Если компилить без оптимизации, самый бытрый — последний вариант, самый медленный — хардкорный.
Если компилить с оптимизацией, самый быстрый — последний вариант, самый медленный — первый.
Т.е. если запилить ручками, то все-таки быстрее получается, чем с использованием алгоритмов из STL.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Как вывести количество чисел в c
Уважаемые программисты подскажите как исправить ошибки в поей программе. она должна считать количество цифр заданного числа
#include #include int schet(int n, int m) < if((n%10)==0) < schet=1; >else < n=n/10; schet++; >return schet; >; void main()
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
хм, много ошибок. как вариант:
#include #include int schet(int n) < int count = 1; while ( n = n / 10 ) count++; return count; >int main()
Регистрация: 24.05.2010
Сообщений: 9
я понимаю ошибок много просто надо написать именно при помощи рекуксии
и мне еще кажется надо у n тип поменять, а то у типа int маленький диапазон значений
Последний раз редактировалось Stilet; 18.06.2010 в 08:27 .
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
Сообщение от Zelenyi
я понимаю ошибок много просто надо написать именно при помощи рекуксии
а, ну так с этого надо было начинать.
int schet (int n) < return n ? 1 + schet (n/10) : 0; >
и мне еще кажется надо у n тип поменять, а то у типа int маленький диапазон значений
ммм, алгоритм от этого не поменяется, диапазон значений не принципиален
Найти количество цифр в числе
уважаемые эксперты подскажите в чем проблема. начал изучать язык С и надо было переписать программу которая встречалась в паскале с использованием рекурсии. Переписал, а что то видимо не так сделал. вот два кода подскажите пожалуйста в чем ошибка
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
uses crt; var m:integer; n:longint; function schet(n:longint; var m:integer):integer; begin if n div 10 = 0 then begin inc(m); schet:=m; end else begin n:=n div 10; inc(m); schet:=schet(n,m); end; end; procedure input_data(var n:longint); begin writeln('Введите число:'); readln(n); end; procedure output_data(schet:integer); begin writeln('Количество цифр в введенном вами числе: ', schet); readkey; end; begin clrscr; writeln('Данная программа считает количество цифр в введенном пользователем числе.'); input_data(n); output_data(schet(n,m)); end.
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
#include #include int schet(int n, int m) { if((n%10)==0) { m++; schet==m; } else { n=n%10; m++; schet==schet(n,m); } return schet; }; void main() { clrscr(); int n,m; printf("Введите число: "); scanf("%d", &n); schet(n,m); printf("Количество цифр в введенном вами числе: %d", schet); getch(); }