1

関数 strrev() を使用して文字列を逆にしようとしています。strrev は反転された文字列へのポインタを返すことがわかっているので、すでに割り当てられている文字列を元の文字列と同じサイズで初期化するだけで、strrev 関数が戻ります。明らかに、これは正しい方法ではなく、その行に「互換性のない型」というエラーが表示されます。

コードは次のとおりです。

int ispalindrome(int n)
{
   char s[10], sr[10];

   itoa(n, s, 10);

   printf("%s", s);

   sr = strrev(s);

   printf("\nReverse: %s", sr);

   if(strcmp(s, sr) == 0)
       return 1;

   else
       return 0;

}
4

2 に答える 2

7
sr[10];
sr = strrev(s);

これはコンパイルさえしません - 配列は代入できません。実際のコードを投稿します。

(これを実際にコンパイルするには、srasを宣言する必要があります。)char *sr


それとは別に、問題はstrrev()文字列をその場で逆にすることです。そのため、2 つの文字列は常に等しく比較されます (逆の文字列をそれ自体と効果的に比較しているため)。あなたがしなければならないことは次のとおりです。

  • 非常に非効率的な方法: 文字列のコピーを作成strrev()し、それからstrcmp()オリジナルとコピーを作成します。

  • 空でない文字列に対する、やや最適化されたアプローチ:


int ispal(const char *s)
{
    const char *p = s + strlen(s) - 1;
    while (s < p)
        if (*p-- != *s++)
            return 0;

    return 1;
}
于 2013-06-05T17:33:20.297 に答える