В заданном тексте найти самое длинное слово и самую длинную фразу - 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');
}

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

  1. В функции main() объявлен массив text, содержащий исходный текст.
  2. Функция longestLine() принимает указатель на начало строки и находит самое длинное слово и самую длинную фразу в тексте.
  3. Внутри функции longestLine() объявлены следующие переменные:
    • max - для хранения максимальной длины строки;
    • i - для итерации по символам строки;
    • fin - массив, содержащий возможные окончания слов и фраз;
    • first - указатель на первый символ текущей строки;
    • last - указатель на последний символ текущей строки;
    • firstMax - указатель на первый символ самой длинной строки;
    • lastMax - указатель на последний символ самой длинной строки.
  4. Далее в функции longestLine() идет поиск самой длинной строки, при этом проверяется каждый символ строки на соответствие одному из символов, указанных в массиве fin. Если символ соответствует, то обновляются указатели last и firstMax, и если новая длина строки больше текущей максимальной длины, то обновляются значения переменных max, firstMax и lastMax.
  5. После выхода из цикла, функция printf() выводит сообщение о самой длинной строке, а затем выводит эту строку.
  6. В конце функции main(), после вызова функции longestLine(), возвращается значение 0, что означает успешное завершение работы программы.

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

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