Проверка 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с памятью, строками и цифрами.
  2. Определяем максимальную длину строки в 1024 символа.
  3. Создаем функцию isNum, которая принимает строку и возвращает 1, если строка является числом, и 0 в противном случае.
  4. Внутри функции isNum инициализируем переменные i = 0 и rez = 1.
  5. Проверяем первый символ строки на число или знак, и если это так, то переходим к следующему шагу. Если нет, то сразу возвращаем 0.
  6. В цикле проходим по всем символам строки, кроме последнего, и проверяем каждый символ на число. Если символ не является числом, то возвращаем 0 и прерываем цикл.
  7. После цикла возвращаем 1.
  8. В функции main открываем файл ex.txt для чтения.
  9. В цикле считываем строки из файла и выводим их на экран.
  10. Если первая цифра или знак в строке не являются возвратом каретки или символом новой строки, увеличиваем счетчик count.
  11. Если строка является числом, выводим сообщение --> is num.
  12. После окончания чтения файла выводим количество строк, которые являются числами.
  13. В случае ошибки открытия файла выводим сообщение об ошибке.
  14. Выполняем все действия в функции main и возвращаем 0.

Оцени полезность:

8   голосов , оценка 3.75 из 5