В заданном тексте найти самое длинное слово и самую длинную фразу - 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, что означает успешное завершение работы программы.