1

与えられた文字列が回文かどうかを判断する宿題用の関数を書いています。「otto」という単語を使って紙の上でも試してみましたが、私のプログラムは常に 1 を返します。

int is_palindrom(const char* palin)
{
    int size = strlen(palin), i=0;
    for (i=0;i<=(size/2); ++i)
    {
        if(palin[i] != palin[(size - i -1)])
        {
            return 1;
        }
    }
    return 0;
}   
4

4 に答える 4

4

あなたのコードは正しいですが、論理式が反転している可能性があることに注意してください。等しくない場合、および等しい1場合に戻ります。これは、関数が「標準」C 関数とは逆に動作していることを意味します。ここで、 は に評価されます。01true

明らかに、好きなものを表現するために好きな値を自由に使用できます。ただし、他の誰かがあなたのコードを読んでいる場合、これは簡単に混乱を招く可能性があります。boolが利用可能な場合は、それを使用する必要があります。1それ以外の場合は、常にが true であり、0が falseであると想定する必要があります。

また、整数ではなく文字列is_palindromeを取ることに注意してください。

is_palindrome("767")つまり、それを asおよびnotと呼ぶ必要があります is_palindrome(767)

于 2013-01-23T13:15:41.723 に答える
1

コードは、必要なときに 0 を返します。関数に引数として渡す文字列を読み取ると、文字列に余分な文字が追加されていると思いますが、おそらく改行文字です。アプリケーションをデバッグするか、関数にデバッグ出力を追加してみてください。たとえば、文字列の長さとその中の文字のASCIIコードを出力します。

これを確認するために使用したコードは次のとおりです。

#include <stdio.h>
#include <string.h>
int is_palindrom(const char* palin)
{
  int size = strlen(palin), i=0;
  for (i=0;i<=(size/2); ++i)
  {
    if(palin[i] != palin[(size - i -1)])
    {
      return 1;
    }
  }
  return 0;
} 

int main(void) {
  printf("%d", is_palindrom("otto"));
  return 0;
}
于 2013-01-23T13:16:11.583 に答える
0

この関数を呼び出すときは、(const char *) の末尾に「\0」があることを確認してください。

于 2013-01-23T13:16:58.787 に答える
0
#include<stdio.h>
#include<conio.h>

int is_palindrom(const char* jj);

int main(char *args){

         int rr =   is_palindrom("otto");
         printf("rsult is %d", rr);
         getch();

}

int is_palindrom(const char* palin) 
    { 
        int size = strlen(palin), i=0; 
        for (i=0;i<=(size/2); ++i) 
        { 
            if(palin[i] != palin[(size - i -1)]) 
            { 
                return 1; 
            } 
        } 
        return 0; 
    }

上記のコード スニペットを使用してコードを実行したところ、問題なく動作しました。回文が入力された場合は 0 を返し、入力された値が回文でない場合は 1 を返します。関数の主要部分はループ for (i=0;i<=(size/2); ++i)であり、比較if(palin[i] != palin[(size - i -1)])はループが 0 から始まり、条件 palin[0] 要素と palin[4-0-1] で、つまりこの場合の palin[3] 要素の最初の o と最後の o は次のとおりです。マップされ、インクリメント++iが行われ、palin[second] 要素と palin[second-last] 要素のネスト マッピングが発生するため、`++i' または 'i++' のいずれかを使用できます。

于 2013-01-23T13:36:02.777 に答える