2016-05-17 3 views
-1

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

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

EDIT: мой текущий код

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. 
+3

Помощь сомнительна, если вы не указали какой-либо код из своей попытки. – doug65536

+0

Извините, что добавил мой текущий код – Piskot

ответ

0

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

Вам действительно нужно только проверить симметричное слово в конце каждого слова. Я предлагаю иметь строку, которая представляет текущее слово. Когда вы сталкиваетесь с каждым символом на входе, посмотрите, является ли это пространством. Если это не пробел, добавьте этот символ в строковую переменную 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 для проверки.

Это проще сделать?

+0

Добавлена ​​обработка случая слова в конце ввода без пробела после него. – doug65536

+0

Это очень помогло мне. Я очень ценю, что вы тратите свое время, чтобы записать это. Да, это намного проще. Это немного изменилось, потому что это будут предложения, а не только слова и один символ - это не то, что я ищу. Очень благодарю вас еще раз. И еще раз жаль, что я сразу не добавил свой код. – Piskot

+0

Этот псевдокод не ищет один символ, он выглядит только один символ за раз, перебирая все предложение. Он предполагает, что слова разделены пробелами, поэтому каждый раз, когда вы сталкиваетесь с ним, это когда вы проверяете, является ли слово, которое вы собрали из предыдущих отдельных символов, симметрично (что бы это ни было - анаграмма?). –