确定输入是否是C中的回文结构

时间:2013-03-28 04:07:31

标签: c palindrome

我对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;
}

2 个答案:

答案 0 :(得分: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;
}

我们可以将自动增量和减量用于等式检查,但阅读起来有点困难。

答案 1 :(得分:1)

您的代码中存在许多错误。

首先,反向前进应为char[]类型,而不是char。 使用 strlen 查找字符串的长度。 sizeof 无效。 sizeof(array)将始终返回(sizeof(char)*50)

反转字符串时出现错误。 它应该是reverse[i]=array[x]

为了比较原始字符串和反向字符串是否相等,您只是比较一个字符,因为变量reverse和forward在您的代码中是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检查DEMO