Задание: Дана символьная строка. Найти максимальное по длине слово (слова разделяются знаками препинания,без доп. массивов)

Подскажите, почему у меня не работает gets при вводе строки и как мне сделать проверку на дополнительное условие: цифры и пробелы тоже не учитываются как часть слова (например, 12привет 12 - тут словом будет только привет, как сделать на это проверку)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
int main()
{
    char* str;
    int i, dl, maxdl, n, nmax;
    setlocale(LC_ALL, "Russian");
    str = (char*)malloc(100); // выделение памяти под символьную строку
    if (!str) // проверка на выделение памяти
    {
        puts("ошибка выделения памяти");
        return 0;
    }
    fflush(stdin); // чистка входного потока
    printf("введите строку: ");
    gets(str); // ввод строки
    i = 0;
    dl = 0; // длина слова
    maxdl = 0; // максимальная длина
    while (*(str + i) != '\0') // цикл, идущий до конца строки
    {
        while (*(str + i) == ' ') // пропуск пробелов
        {
            i++;
        }
        n = i; // n – позиция начала слова
        while (*(str + i) != ' ' && *(str + i) != '\0')
        {
            i++;
            dl++; // подсчёт длины слова
        }
        if (maxdl < dl)
        {
            maxdl = dl; // запоминание максимальной длины
            nmax = n; // запоминание координаты начала у самого длинного слова
        }
        dl = 0; // обнуление значения длины
    }
    puts("слово max длины: ");
    while (*(str + nmax) != ' ' && *(str + nmax) != '\0')
    {
        printf("%c", *(str + nmax)); // вывод самого длинного слова
        nmax++;
    }
    getch();
    return 0;
}

Ответы (1 шт):

Автор решения: Sergey

как мне сделать проверку на дополнительное условие: цифры и пробелы тоже не учитываются как часть слова

Замените

while (*(str + i) != ' ' && *(str + i) != '\0')

на

while (  isalpha(*(str + i)) && *(str + i) != '\0')
→ Ссылка