Pascal Чётные и нечётные количества букв в словах
Помогите дописать код. Не могу никак до конца реализовать. Требуется чтобы программа возвращала три целых числа, количество слов в строке с чётным количеством букв, нечётным и количество слов. Важно чтобы это происходило посимвольно.
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
И сам код
program helptest;
var
input : string;
in_word : boolean;
word_count : integer;
word_length : integer;
word_position : integer;
i : integer;
begin
i := 0;
in_word := false;
word_count := 0;
word_length := 0;
word_position := 0;
input:= ' ';
writeln('Enter your string');
read(input);
for i := 1 to length (input) do
begin
if in_word and (input[i] = ' ') then
begin
word_length = input[i] - word_position;
in_word = false;
inc(word_count);
end
else if in_word then
begin
word_length = input[i] - word_position;
in_word = false;
end
else if not in_word and (input[i] <> ' ') then
begin
word_position = input[i];
in_word = true;
end;
writeln('word_length = ', word_length);
writeln('word_count = ', word_count);
end
end.
Ответы (1 шт):
Вам нужно отслеживать только два комбинированных условия (в остальных случаях просто нечего делать)
Если in_word and (s[i] = ' '), то слово закончилось, нужно посчитать его длину как разность с запомненным началом, увеличить соотв. счётчик и сбросить in_word. То же самое нужно сделать, если строка закончилась в состоянии in_word. От лишнего кода для этого случая можно избавиться, просто добавив к строке пробел.
Если not in_word and (s[i] <> ' '), то слово начинается, запомните позицию, и установите in_word
Всё.
program contest1;
var
s: string;
in_word: Boolean;
i, Start, Odd_count, Even_count: Integer;
begin
s := 'А мама мыла грязную раму';
s := s + ' ';
for i := 1 to length(s) do
if in_word and (s[i] = ' ') then begin
in_word := False;
if Odd(i - Start) then
Inc(Even_count)
else
Inc(Odd_count);
end
else if not in_word and (s[i] <> ' ') then begin
in_word := True;
Start := i;
end;
Writeln('Odd ', Odd_count, ' Even ', Even_count);
Readln;
end.