3

私はCにかなり慣れていないので、少し問題があります。ユーザー入力を受け取り、入力が回文かどうかを判断するプログラムを作成する必要があります。入力を逆にするプログラムがありますが、文字列を比較するのに問題があります。すべての入力は、回文ではないものとして出てきます。入力を比較できるように、整数の添え字インデックスを使用すると思います。また、文字以外のすべての文字を無視するとします。これは c.type 関数だと思います。

#include <stdio.h>
#include <string.h>
#define N 50

main()
{
    char array[N] = {0};
    char front;
    char end;
    char x;
    char w =0;
    char i;
    char forward;
    char reverse;

    printf("Enter Message: ");
    gets(array);

    front = sizeof(array);
    end = sizeof(array) - 1; 

    for( i = 0; i <= front; i++){      
       forward = array[i];

    } 
    for( x = end; x >= 0; x--){
       reverse = array[x];
    }

    if (forward != reverse){
       w = 1;
    }

    if(w == 1){
      printf("Not a Palindrome");
    } 
    else{
        printf("Palindrome");
    }

    printf("\n");
    return 0;
}
4

2 に答える 2

4

私の C は少し錆びていますが、検索する必要があるのは文字列の長さの半分 (マイナス 1) だけです。

int isPalindrome(char *str)
{
      char *p1 = str
      char *p2 = str + strlen(str) - 1;

      while(p2 > p1) {
          if (*p1 != *p2) return 0;
          p1++; p2--;
      }
      return 1;
}

自動インクリメントとデクリメントを等値チェックに組み込むこともできますが、読むのは少し難しくなります。

于 2013-03-28T04:27:00.283 に答える
1

コードに多くのエラーがありました。

まず、 reverseforwardchar[]はではなくのタイプである必要がありcharます。文字列の長さを調べるには、 strlenを使用します。sizeofは機能しません。sizeof(array)必ず戻ってきます(sizeof(char)*50)

string の反転中にエラーが発生しました。である必要がありますreverse[i]=array[x]

元の文字列と逆文字列が等しいかどうかを比較する場合、コードでは変数 reverse と forward が char 型であるため、1 文字のみを比較していました。関数を使用して、元の (前方) と逆の文字列 (char 配列) を比較する必要がありstrcmpます。

私はそれを修正しました。これはすべてのテストケースでうまくいくはずです。

#include <stdio.h>
#include <string.h>
#define N 50
int main()
{
    char array[N] = {0};
    char front;
    char end;
    char x;
    char i;
    char forward[N];
    char reverse[N];

    printf("Enter Message: ");
    gets(array);

    front = strlen(array);
    end = strlen(array) - 1; 
    for( i = 0; i <= front; i++)
    {      
        forward[i]= array[i];

    } 
    for( i=0,x = end; x >= 0; i++,x--)
    {
        reverse[i]= array[x];
    }
    reverse[i]=0;
    if (strcmp(forward,reverse)!=0)
    {
        printf("Not a Palindrome");
    } 
    else{
        printf("Palindrome");
    }

    printf("\n");
    return 0;
}

IDEONEでデモをチェック

于 2013-03-28T04:22:24.047 に答える