Подсчет слов-чисел в строке - C (СИ)

Узнай цену своей работы

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

Здравствуйте. Необходимо подсчитать в произвольной строке слова-числа, т.е., например, строка: qwer1234 asdf 345 ds123sda 12 123dsfs Получаем: 345 12 стаж месяц). вот что у меня получилось. Спасибо.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
 
int main()
{
    char x[100];
    int k;
 
    printf("Vvedite stroku: ");
    fflush(stdin);
    gets(x);
 
    if(x[0]==' ')
        k=0;
    else
        k=1;
 
    for(int i=0; x[i]!='\0'; i++)
    {
        if(x[i]==' ' && x[i+1]!=' ' && x[i+1]!='\0')
            k++;    
    }
    printf("\n\nKolichestvo slov: %d\n", k);    
 
    int k1=0;
        
    for(int i=0; x[i]!='\0'; i++)
    {
        if((x[i]>='0' && x[i]<='9') || (x[i]>='a' && x[i]<='z') || (x[i]>='A' && x[i]<='Z'))
        k1++;
    }
 
    printf("\n\nKolichestvo bukv i cifr: %d\n", k1);

    getch();
    return 0;
}
забыл добавить. нельзя использовать функцию isdigit Спасибо.

Решение задачи: «Подсчет слов-чисел в строке»

textual
Листинг программы
    while (subString != NULL)
    {
        for (p = subString; *p != '\0'; p++) {
            if (!isdigit(*p)) break;
        }
          if (*p=='\0') {
           printf("%s ", subString);
           ++n;
        }
        subString = strtok(NULL, delim);
    }

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

В этом коде происходит подсчет слов-чисел в строке. Вот список действий:

  1. Подготовительные действия:
    • Переменная subString содержит подстроку из исходной строки, которую необходимо проанализировать.
    • Переменная p используется как указатель на текущий символ в подстроке.
    • Переменная n используется для подсчета количества найденных слов-чисел.
    • Переменная delim содержит разделитель, который используется для разделения строк на слова.
  2. Проверка каждого символа в подстроке:
    • Внешний цикл while продолжается до тех пор, пока не будет получено значение NULL для переменной subString. Это происходит, когда подстрока исчерпывается.
    • Внутренний цикл for проходит по каждому символу в подстроке.
    • Если символ является числом (проверка с помощью функции isdigit), то цикл продолжается. Если символ не является числом, то цикл прерывается.
    • Если внутренний цикл завершается, значит, подстрока полностью состоит из чисел, и она считается словом-числом.
  3. Действия после обнаружения слова-числа:
    • Если внутренний цикл завершается с условием *p == '\0', это означает, что была найдена строка, заканчивающаяся числом.
    • В этом случае переменная n увеличивается на единицу.
    • Значение переменной subString заменяется на следующую подстроку из исходной строки, разделенную на слова с помощью функции strtok. В результате выполнения этого кода будет выведено количество слов-чисел в исходной строке.

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

12   голосов , оценка 4.25 из 5
Похожие ответы