Проверка string на число - C (СИ)
Формулировка задачи:
Здравствуй, форумчанин!
У меня есть string с данными.
Файл:
12
2
пыфрп
145
512
прфы
42
ап
Вот. Как мне сделать проверку каждой строки?
Мне нужно посмотреть, в данной строке находится цифра, или слово.
я считал эти данные из файла.
Стринг я не могу проверить по аски коду.
Есть ли еще способы?
int main ()
{
string line;
int count = 0;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line);
cout << line << endl;
if(line >= '0' && line <= '9') // error
{
count ++;
}
}
myfile.close();
}
else cout << "Unable to open file";
cout << count;
_getch();
return 0;
}
переделал на char
как проверить, является строка числом?
int main ()
{
const int charlength = 1024;
char buffer[charlength];
int count = 0;
FILE *myfile = fopen ("example.txt", "r");
if (myfile)
{
while ( !feof(myfile) )
{
fgets (buffer, charlength , myfile);
printf(buffer);
if (buffer) count++;
}
}
else printf ("Unable to open file");
printf("\r\n%d", count);
_getch();
return 0;
}Решение задачи: «Проверка string на число»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define CHARLEN 1024
int isNum(char *str) {
int i = 0;
int rez = 1;
if (isdigit(*str) || *str == '+' || *str == '-') {
for (i = 1; i < strlen(str) && str[i] != '\n'; ++i) {
if (!isdigit(str[i])) {
rez = 0;
break;
}
}
} else
rez = 0;
return rez;
}
int main() {
char buffer[CHARLEN];
int count = 0;
FILE *myfile = fopen("ex.txt", "r");
if (myfile) {
while (fgets(buffer, CHARLEN, myfile)) {
printf("Loaded => %s", buffer);
if (buffer[0] != '\r' && buffer[0] != '\n')
count++;
if (isNum(buffer))
printf("--> is num\n");
}
}
//
else
printf("Unable to open file");
printf("\r\n%d", count);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с памятью, строками и цифрами.
- Определяем максимальную длину строки в 1024 символа.
- Создаем функцию isNum, которая принимает строку и возвращает 1, если строка является числом, и 0 в противном случае.
- Внутри функции isNum инициализируем переменные i = 0 и rez = 1.
- Проверяем первый символ строки на число или знак, и если это так, то переходим к следующему шагу. Если нет, то сразу возвращаем 0.
- В цикле проходим по всем символам строки, кроме последнего, и проверяем каждый символ на число. Если символ не является числом, то возвращаем 0 и прерываем цикл.
- После цикла возвращаем 1.
- В функции main открываем файл
ex.txtдля чтения. - В цикле считываем строки из файла и выводим их на экран.
- Если первая цифра или знак в строке не являются возвратом каретки или символом новой строки, увеличиваем счетчик count.
- Если строка является числом, выводим сообщение
--> is num. - После окончания чтения файла выводим количество строк, которые являются числами.
- В случае ошибки открытия файла выводим сообщение об ошибке.
- Выполняем все действия в функции main и возвращаем 0.