Определить длину самого короткого и длинного слова. Не работает счетчик - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана строка, состоящая из русских слов, разделенных пробелами (одним или несколькими). Определить длину самого короткого и длинного слова.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{ 
int i,k=0, max=0, min=30;
char S[30];
gets(S);
for (i=0; S[i]!='\0';i++)
{
if (S[i] !='  ')
k++;
else
if(k>max)
max=k;
if(k<min) 
min=k;
k=0;
if(S[i-1]='  ')
continue;
}
printf("Longest=%d\n Shortest=%d\n",max,min);
system("PAUSE");
return 0;
}
При запуске программы, не вычисляет наибольший и наименьший размеры слова. Проблема в счетчике, подскажите где не так.

Решение задачи: «Определить длину самого короткого и длинного слова. Не работает счетчик»

textual
Листинг программы
#include <stdio.h>
/*программа выводит количество символов в самом длинном и самом коротком слове*/
#define IN 1 /*внутри слова*/
#define OUT 0/*вне слова*/
#define MAXWORDS 80 /*максимальное количество слов 80*/
 
int main()
{
int i, c, state; /*i-индекс массива слов,  с - вводимый символ,
                      state - состояние переменной с ( IN - внутри слова, OUT - вне слова) */
int lenword [MAXWORDS], nextword, maxlen, minlen;/*счетчик массива слов,следующее слово,самое
                                           длинное слово, самое короткое слово*/
nextword = maxlen = 0;
minlen = 30;
for (i = 0; i < MAXWORDS; ++i)
    lenword [i] = 0;
state = OUT;
 
while ((c = getchar())!= EOF && nextword < MAXWORDS) {
    if ( c == ' ' || c == '\n' || c == '\t'){
        if (state == IN){
            if (lenword [nextword] > maxlen)
                    maxlen = lenword [nextword];
            if (lenword [nextword] < minlen)
                minlen = lenword [nextword];
        ++nextword; state = OUT; }
    }
    else {
        if (state == OUT)
            state = IN;
            ++lenword [nextword];
            }
          }
printf("Samoe dlinnoe = %d  Samoe korotkoe = %d\n", maxlen, minlen);
 
 
return 0;
}

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

  1. Включаем необходимые заголовочные файлы для работы с консолью и объявляем переменные.
  2. Программа выводит количество символов в самом длинном и самом коротком слове.
  3. Определяем некоторые константы для удобства работы с кодом.
  4. В функции main() объявляем переменные для хранения индекса слова, текущего символа, состояния переменной с ( IN - внутри слова, OUT - вне слова) и переменные для хранения длины слова, следующего слова, максимальной и минимальной длины слова.
  5. Инициализируем переменные следующим образом: nextword = maxlen = 0; minlen = 30;
  6. Инициализируем массив lenword[], который будет хранить длину каждого слова, значением 0.
  7. Перемещаем состояние переменной state в OUT.
  8. В цикле while считываем каждый символ из стандартного ввода до тех пор, пока не достигнем конца файла или не заполним все слова в массиве.
  9. Если считанный символ является пробелом, переносом строки или табуляцией, то проверяем текущее состояние переменной state. Если оно равно IN, то обновляем значения maxlen и minlen, используя текущую длину слова, а затем увеличиваем значение nextword и переводим state в OUT.
  10. Если считанный символ не является пробелом, переносом строки или табуляцией, то проверяем текущее состояние переменной state. Если оно равно OUT, то переводим его в IN, увеличиваем значение lenword[nextword] на 1 и обновляем значение nextword, если текущий символ является буквой.
  11. После окончания цикла while выводим значения maxlen и minlen.
  12. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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