В заданном тексте найти самое длинное слово и самую длинную фразу - C (СИ) (148272)
Формулировка задачи:
Если со словом я хоть как-то справился, то с фразой просто ахтунг. Помогите пожалуйста. Вот код того, что смог сделать.
#include <conio.h> #include <stdio.h> #include <string.h> char Text[80], word[80]; int counter, maxl, i, pos; int main() { clrscr (); printf ("Введите текст (80 символов максимум):\n"); gets (Text); strlwr (Text); counter = maxl = pos = 0; for (i = 0; i < strlen (Text); i++) { if (Text[i] >= 'a' && Text[i] <= 'z') ++counter; else { if (counter > maxl) { maxl = counter; pos = i - counter; memcpy (word, &Text[pos], counter); } counter = 0; } } if (counter > maxl) { maxl = counter; pos = i - counter; memcpy (word, &Text[pos], counter); } printf ("Самое длинное слово: %s\n", word); printf ("Его позиция: %i\n", pos); printf ("Его длина: %i\n", maxl); getch (); return 0; }
Решение задачи: «В заданном тексте найти самое длинное слово и самую длинную фразу»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> void longestLine(char* ); int main() { char text[] = "Programming is a marvellous, vital, challenging activity, and books on programming" "should brim over with enthusiasm for it! This book is educational, but also interesting in a way" " that puts the fun back in functions. If this doesn't seem like something you'll enjoy, then" "please put the book back on the shelf, but in a more prominent position. Thanks!"; longestLine(text); return 0; } void longestLine(char* str) { int max = 0, i; char fin[] = "!?."; char *first = str, *last, *firstMax = str, *lastMax; for( ;*str; str++){ for(i = 0; fin[i]; i++) if(*str == fin[i]){ last = str; if(last - first > max){ max = last - first; firstMax = first; lastMax = last; } first = str + 1; break; } } printf("Longest line has %d symbols:\n", max + 1); while(firstMax <= lastMax) putchar(*firstMax++); putchar('\n'); }
Объяснение кода листинга программы
- В функции
main()
объявлен массивtext
, содержащий исходный текст. - Функция
longestLine()
принимает указатель на начало строки и находит самое длинное слово и самую длинную фразу в тексте. - Внутри функции
longestLine()
объявлены следующие переменные:max
- для хранения максимальной длины строки;i
- для итерации по символам строки;fin
- массив, содержащий возможные окончания слов и фраз;first
- указатель на первый символ текущей строки;last
- указатель на последний символ текущей строки;firstMax
- указатель на первый символ самой длинной строки;lastMax
- указатель на последний символ самой длинной строки.
- Далее в функции
longestLine()
идет поиск самой длинной строки, при этом проверяется каждый символ строки на соответствие одному из символов, указанных в массивеfin
. Если символ соответствует, то обновляются указателиlast
иfirstMax
, и если новая длина строки больше текущей максимальной длины, то обновляются значения переменныхmax
,firstMax
иlastMax
. - После выхода из цикла, функция
printf()
выводит сообщение о самой длинной строке, а затем выводит эту строку. - В конце функции
main()
, после вызова функцииlongestLine()
, возвращается значение 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д