Определить длину самого короткого и длинного слова. Не работает счетчик - 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с консолью и объявляем переменные.
- Программа выводит количество символов в самом длинном и самом коротком слове.
- Определяем некоторые константы для удобства работы с кодом.
- В функции main() объявляем переменные для хранения индекса слова, текущего символа, состояния переменной с ( IN - внутри слова, OUT - вне слова) и переменные для хранения длины слова, следующего слова, максимальной и минимальной длины слова.
- Инициализируем переменные следующим образом: nextword = maxlen = 0; minlen = 30;
- Инициализируем массив lenword[], который будет хранить длину каждого слова, значением 0.
- Перемещаем состояние переменной state в OUT.
- В цикле while считываем каждый символ из стандартного ввода до тех пор, пока не достигнем конца файла или не заполним все слова в массиве.
- Если считанный символ является пробелом, переносом строки или табуляцией, то проверяем текущее состояние переменной state. Если оно равно IN, то обновляем значения maxlen и minlen, используя текущую длину слова, а затем увеличиваем значение nextword и переводим state в OUT.
- Если считанный символ не является пробелом, переносом строки или табуляцией, то проверяем текущее состояние переменной state. Если оно равно OUT, то переводим его в IN, увеличиваем значение lenword[nextword] на 1 и обновляем значение nextword, если текущий символ является буквой.
- После окончания цикла while выводим значения maxlen и minlen.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д