Раньше программа подсчитывала общее количество букв и слов в строке. Сейчас пытаюсь сделать так, чтобы он определял сколько слов с четным количеством букв. Именно по характеру. Подскажите как закончить.
program test;
var
c : char;
i : integer;
numOfChar : integer;
rem : integer;
begin
i := 1;
numOfChar := 0;
rem := 0;
c := ' ';
writeln('Enter your string');
read(c);
while (c <> #13) and (c <> #10) do
begin
if c <> ' ' then inc(numOfChar)
else inc(i);
rem := numOfChar mod 2;
read(c);
end;
writeln('count of words: ', i);
writeln('count of chars: ', numOfChar);
writeln('rem: ', rem)
end.
Вот код, который я не закончил.
Мне кажется, что в вашем коде есть логическая ошибка. Введите пять пробелов и <enter>, он покажет пять введенных слов! Само по себе пространство ненадежно. Введите переменную, например inWord: boolean
, и инициализируйте ее значением false
. Когда пользователь вводит пробел char <>, установите его true
и увеличьте счетчик символов. Когда пользователь вводит char = пробел и inWord = true
, установите его false
и увеличьте words
. На этом этапе вы также можете проверить, является ли счетчик символов четным или нет.
Если вы хотите считать слова, вам нужно знать, когда пробелы имеют смысл, а когда нет. Рассмотрим, например, строку ' hello world '
.
Если вы войдете в свой цикл по строке с логическим именем in_word
, установленным в false. Мы установим его в true только тогда, когда обнаружим непробельный символ. У нас также есть целые значения word_count
и word_length
. Оба установлены на 0
. Мы будем увеличивать word_count
, когда in_word
истинно, и мы обнаружим пробел.
Char: ' '
in_word: false
word_count: 0
word_length: 0
Char: ' '
in_word: false
word_count: 0
word_length: 0
Char: 'h'
in_word: false -> true
word_count: 0
word_length: 1
Char: 'e'
in_word: true
word_count: 0
word_length: 2
Char: 'l'
in_word: true
word_count: 0
word_length: 3
Char: 'l'
in_word: true
word_count: 0
word_length: 4
Char: 'o'
in_word: true
word_count: 0
word_length: 5
Char: ' '
in_word: false
word_count: 1
word_length: 0
Char: 'w'
in_word: false -> true
word_count: 1
word_length: 1
Char: 'o'
in_word: true
word_count: 1
word_length: 2
Char: 'r'
in_word: true
word_count: 1
word_length: 3
Char: 'l'
in_word: true
word_count: 1
word_length: 4
Char: 'd'
in_word: true
word_count: 1
word_length: 5
Char: ' '
in_word: false
word_count: 2
word_length: 0
begin
in_word := false;
word_count := 0;
word_length := 0;
for i := 1 to length (input) do
begin
if in_word && input[i] = ' ' then
begin ... end
else if in_word then
begin ... end
else if input[i] = ' ' then
begin ... end
else
begin ... end
end
Теперь вы можете изменить этот набор шагов, чтобы он увеличивал переменную five_letter_words
всякий раз, когда встречается слово из пяти букв?
Крис, я понял твою мысль. Но я не могу завершить код, который вы написали. Для меня это очень сложно в данный момент. Не могли бы вы помочь более подробно?
Используйте «нечетный()», чтобы проверить, является ли число четным.