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