为什么我的回文功能总是返回1?

时间:2013-01-23 13:06:57

标签: c

我正在为我的作业编写一个函数,该函数应该判断给定的字符串是否是回文。 虽然我甚至在纸上用“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 个答案:

答案 0 :(得分:4)

您的代码是正确的,但请注意您可能具有反转的逻辑表达式。如果相等,则返回1;如果不相等,则返回0。这意味着您的函数与“标准”C函数相反,其中1的计算结果为true

显然,您可以自由地使用您喜欢的任何值来表示您想要的任何内容。但是,如果其他人正在阅读您的代码,这很容易导致混淆。如果bool可用,您应该使用它;否则,您应始终认为1为真,0为假。

此外,请务必注意is_palindrome需要字符串,而不是整数。

即。您必须将其称为is_palindrome("767")不是 is_palindrome(767)

答案 1 :(得分:1)

您的代码does return 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;
}

答案 2 :(得分:0)

当你调用这个函数时,确保你的(const char *)末尾有一个“\ 0”。

答案 3 :(得分: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 ++”