Как найти симметричные слова в строке?
Я пытался сделать эту работу некоторое время. Мне нужно сделать программу для школьного проекта, которая берет строку и считает симметричные слова внутри нее.
Внутри должны быть предложения, но все помогает. Я не могу заставить его работать, независимо от того, какой подход я пробую. Не могли бы вы помочь мне?
РЕДАКТИРОВАТЬ: мой текущий код
program rocnik;
var text:string;
word,drow:string[10];
i,j,k,p1:integer;
space,sym:boolean;
begin
p1:=0;
write('Enter text: ');readln(text);
if text<>'' then
begin
for i:=1 to length(text) do
begin
k:=0;
if space then
begin
j:=0;
space:=false;
end;
sym:=true;
if text[i]<>' ' then
begin
j:=j+1;
word[j]:=text[i];
end
else space:=true;
if space then
begin
space:=false;
for j:=1 to length(word) do
begin
k:=k+1;
drow[k]:=word[j];
if drow[k]<>word[j] then sym:=false;
end;
end;
if space and sym then p1:=p1+1;
end;
end
else writeln('You didnt enter any text');
writeln('there are ',p1,' symmetrical words in text');
readln;
end.
1 ответ
Вы пытаетесь сделать все сразу! Программирование часто является упражнением в том, чтобы разбить большую проблему на несколько простых проблем.
Вам действительно нужно только проверить наличие симметричного слова в конце каждого слова. Я предлагаю иметь строку, которая представляет текущее слово. Когда вы встретите каждый символ на входе, посмотрите, является ли он пробелом. Если это не пробел, добавьте этот символ к currentWord
строковая переменная.
Каждый раз, когда вы сталкиваетесь с пробелом, вы должны проверить currentWord
для симметрии, затем очистите currentWord
переменная.
Ваш код пытается отдельно отслеживать длину слова. Это просит ошибок. Вы можете запросить строку для ее текущей длины, используя length
функция.
Итак, ваш код должен сводиться к следующему:
Обратите внимание, что это псевдо-Паскаль - я стараюсь не давать вам ответ "копировать и вставить", чтобы вы узнали
currentWord := ''
for each character do
begin
if this character is not a space then
add the character to the currentWord
else
if wordIsSymmetrical(currentWord) then
print word or add to count as needed
end
currentWord := ''
end
end
if currentWord <> '' then
if wordIsSymmetrical(currentWord) then
print word or add to count as needed
end
end
... и добавить функцию под названием wordIsSymmetrical
который проверяет только строковый параметр, который мы передаем ему.
Обратите внимание, что в конце у вас может быть слово, не встречая пробела. Здесь снова вы можете использовать wordIsSymmetrical
Проверять.
Кажется ли это легче сделать?