Задание: Дана символьная строка. Найти максимальное по длине слово (слова разделяются знаками препинания,без доп. массивов)
Подскажите, почему у меня не работает 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')