Вывести самое короткое слово и его длину - C (СИ) (77864)
Формулировка задачи:
г) Вывести самое коpоткое слово и его длину. на си
#include <stdio.h>
#define DLSL 80 /* макс. длина слова */
main()
{ char s; /* тек. символ */
char sl[DLSL]; /* тек. слово */
int i,j; /* индексы тек. символа в слове */
int psl=1; /* признак, что слово длиной до 5 симв. первое */
printf ("\n\nВведите строку символов\n");
s=getchar();
while (s!='\n')
{
if (s==' ') s=getchar();
else
{ i=0;
do
{ sl[i++]=s;
s=getchar();
}
while ((s!=' ') && (s!='\n'));
if (i<5)
{ if (psl) /* если слово первое */
{ printf ("Слова длиной до 5 символов:\n");
psl=0;
}
for (j=0; j<i; j++)
putchar(sl[j]);
putchar(' ');
}
}
}
if (psl) printf ("Слов длиной до 5 символов нет");
}Решение задачи: «Вывести самое короткое слово и его длину»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DELIM " \t\n"
int main ()
{
char s[] = "Hello world";
char *p;
char *t;
if ( *s )
{
for ( p = strtok (s, DELIM), t = strdup (p) ; p ; p = strtok (NULL, DELIM) )
if ( strlen (p) < strlen (t) )
{
free (t);
t = strdup (p);
}
printf (" Min world : %s \n Len = %d \n", t, strlen (t) );
free (t);
}
else printf (" Min = 0\n");
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены три переменные: s, p, t.
- Переменная s содержит строку
Hello world. - В цикле for начинается обработка строки.
- Первая итерация:
a) p становится равным первому слову в строке
Hello world(после разделения на слова). b) t становится равным копии слова, найденного на текущей итерации. - Вторая и последующие итерации: a) Если текущее слово короче, чем предыдущее, то: i) t освобождается от выделенной памяти. ii) t становится равным копии текущего слова. b) Если текущее слово длиннее или равно предыдущему, то ничего не происходит.
- Выводится самое короткое слово (t) и его длина (strlen(t)).
- t освобождается от выделенной памяти.
- Если строка пустая, то выводится
Min = 0. - Возвращается 0, что означает успешное завершение программы.