Как найти симметричные слова в строке?

Я пытался сделать эту работу некоторое время. Мне нужно сделать программу для школьного проекта, которая берет строку и считает симметричные слова внутри нее.

Внутри должны быть предложения, но все помогает. Я не могу заставить его работать, независимо от того, какой подход я пробую. Не могли бы вы помочь мне?

РЕДАКТИРОВАТЬ: мой текущий код

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 Проверять.

Кажется ли это легче сделать?

Другие вопросы по тегам