Найти и вывести все длинные слова предложения - C (СИ)
Формулировка задачи:
У меня выводится только одно длинное слово. Как быть если их несколько.
char s[100];
char *ptr,*p;
int max=0,smax=0;
puts("Enter a string:" );
gets(s);
ptr=strtok(s," ");
while (ptr)
{
smax=strlen(ptr);
if(smax>max)
{
max=smax;
p=ptr;
}
ptr=strtok(NULL," ");
}
printf("%s",p);Решение задачи: «Найти и вывести все длинные слова предложения»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[100];
char* p[100];
char** cursor = p;
char* ptr;
int max = 0, smax = 0;
printf("Enter a string: ");
gets(s);
ptr = strtok(s, " ");
while (ptr)
{
smax = strlen(ptr);
if (smax > max)
{
max = smax;
cursor = p;
}
if (smax == max)
{
*cursor = ptr;
*(++cursor) = NULL;
}
ptr = strtok(NULL, " ");
}
for (cursor = p; *cursor != NULL; ++cursor)
{
printf("%s\n", *cursor);
}
system("pause");
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены две строки:
sдля ввода строки иpдля хранения подстрок. - Указатель
cursorиспользуется для перебора массиваp. ptrиспользуется как рабочий указатель для поиска подстрок.- Функция
strtokиспользуется для разделения входной строки на подстроки по пробелам. maxиспользуется для отслеживания наибольшей длины подстроки, аsmaxдля отслеживания текущей длины подстроки.- Если длина текущей подстроки больше максимальной, обновляется максимальная длина и указатель
cursorсбрасывается в начало массиваp. - Если длина текущей подстроки равна максимальной, подстрока добавляется в массив
pи указательcursorперемещается к следующему элементу массива. - После завершения цикла, все подстроки выводятся на экран.
- В конце программы запрашивается ввод, чтобы программа не закрылась сразу.
- Программа возвращает 0, что означает успешное завершение.