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