Вывести на экран список слов с указанием их длины - C (СИ)
Формулировка задачи:
1. Задан текст, состоящий из отдельных слов. Длина текста - не более 80 символов. Исходный текст должен заканчиваться символом (’.’, ’!’, ’?’), слова разделены пробелами. Вывести на экран список слов с указанием их длины. Определить длину самого короткого и самого длинного слова. Вывести на экран эти слова с комментариями: самое длинное слово, самое короткое слово.
Программа должна предусматривать:
1. Вывод на экран информации о программе, а также, о ее разработчике.
2. Ввод текста с клавиатуры.
3. Вывод результата обработки текстовой строки.
4. Выход из программы.
Есть похожая программа. Кого заинтересует или захочет помочь я могу скинуть программу.
Пишите: <cut>
Решение задачи: «Вывести на экран список слов с указанием их длины»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define MAX_TEXT_LENGTH 80
#define DELIMETERS " .,?!"
int main(void)
{
char textString[MAX_TEXT_LENGTH + 1];
char longestWord[MAX_TEXT_LENGTH + 1];
char shortestWord[MAX_TEXT_LENGTH + 1];
char* pch = NULL;
char ch = 0;
int canContinue = 0;
int i = 0;
do
{
printf("Enter text:\n");
memset(textString, 0, sizeof(textString));
memset(longestWord, 0, sizeof(longestWord));
memset(shortestWord, 0, sizeof(shortestWord));
if (fgets(textString, MAX_TEXT_LENGTH, stdin) != NULL)
{
if (textString[strlen(textString) - 1] == '\n')
textString[strlen(textString) - 1] = '\0';
i = 0;
pch = strtok(textString, DELIMETERS);
while (pch != NULL)
{
i++;
printf("Word [%02d]: '%s'\n", i, pch);
if (i == 1)
{
strcpy(longestWord, pch);
strcpy(shortestWord, pch);
}
if (strlen(pch) > strlen(longestWord))
{
strcpy(longestWord, pch);
}
if (strlen(pch) < strlen(shortestWord))
{
strcpy(shortestWord, pch);
}
pch = strtok(NULL, DELIMETERS);
}
printf("Shortest word: '%s' (length = %lu).\n",
shortestWord, strlen(shortestWord));
printf("Longest word: '%s' (length = %lu).\n",
longestWord, strlen(longestWord));
do
{
printf("Continue (y/n)?\n");
scanf(" %c", &ch);
while ((i = getchar()) != '\n' && i != EOF);
if (ch == 'y')
{
canContinue = 1;
}
else if (ch == 'n')
{
canContinue = 0;
}
else
{
printf("Input error!\n");
}
}
while ((ch != 'y') && (ch != 'n'));
}
}
while (canContinue);
printf("Developed by HighPredator!\n");
getchar();
return 0;
}
Объяснение кода листинга программы
В этом коде на языке C реализован алгоритм, который позволяет пользователю ввести текст, а затем выводит список слов из этого текста вместе с их длиной. Список переменных:
- textString - строка, в которую пользователь вводит текст.
- longestWord - строка, в которую сохраняется самое длинное слово из введенного текста.
- shortestWord - строка, в которую сохраняется самое короткое слово из введенного текста.
- pch - указатель на текущий символ в тексте.
- ch - символ, который считывается с помощью сканера ввода.
- canContinue - флаг, который позволяет продолжать работу программы.
- i - счетчик, используемый в цикле. Список действий:
- Пользователю предлагается ввести текст.
- Если ввод некорректен (текст превышает максимально допустимую длину или содержит нежелательные символы), программа выводит сообщение об ошибке и просит ввести корректный текст.
- Текст разбивается на отдельные слова с помощью функции strtok.
- Каждое слово выводится на экран вместе с его длиной.
- Если это первое слово в тексте, оно сохраняется как самое длинное и самое короткое слово.
- Для каждого следующего слова проверяется его длина и, если оно длиннее или короче самого длинного или самого короткого слова, оно заменяет предыдущее самое длинное или самое короткое слово.
- После обработки всех слов программа выводит самое длинное и самое короткое слово.
- Пользователю предлагается продолжить работу с программой (ввод 'y' или 'n').
- Если пользователь вводит 'y', программа продолжает работу с шага 1.
- Если пользователь вводит 'n', программа завершается.