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为真和0假。

另外,请务必注意is_palindrome采用字符串而不是整数。

即你必须称它为is_palindrome("767")不是 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] element 和 palin[4-0-1] 即 palin[3] element first o 和 last o 在这种情况下是映射,然后发生增量++i,然后发生 palin[second] 和 palin[second-last] 元素的嵌套映射,因此您可以使用 `++i' 或 'i++'

于 2013-01-23T13:36:02.777 回答