2016-05-17 16 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

この擬似コードは1文字を検索しません。一度に1文字しか表示せず、文全体をループします。単語はスペースで区切られていると仮定しています。そのたびに、前の単一文字からアセンブルした単語が対称であるかどうかを確認します。 –

関連する問題