我不知道问题是什么?我的代码不起作用。 :(
#include <iostream>
#include <string.h>
using namespace std;
bool isPalindrome(char* word){
int len = strlen(word);
if(len <= 1){
return true;
}else
if(word[0] == word[len-1]){
char n[len-1];
n[len-1]= "\0";
return isPalindrome(n);
}
return false;
}
int main(){
char *a = "alla";
bool b = isPalindrome(a);
cout<<b<<endl;
return 0;}
错误是“ \ 0”,我不知道为什么。 我的主要功能也不应该正确。
答案 0 :(得分:1)
我相信"\0"
是一个以零结尾的2个字符 C字符串,由一个零和一个零组成。改用'\0'
,它只是一个零。请记住:对字符串使用双引号,对于单个字符使用单引号。您不能将字符串分配给字符串索引位置,因此双引号不能那样工作,但是您可以 将字符分配给字符串索引位置。
第二个错误:读取the documentation on strlen()
。用char n[len + 1];
而不是char n[len-1];
创建n,以使n与另一个字符串相同。然后,空值以n[len]= '\0';
而不是n[len - 1]= '\0';
终止,因为strlen不计算字符串中的空终止符。但是,我对您的代码感到困惑:此n字符串的目的是什么?最后,您正在编写n数组之外的内容!由于您使n的大小为len - 1
,因此需要在索引len - 2
处终止null。您的情况下的len - 1
在数组之外!始终为null终止 inside 数组,其索引号小于数组的大小。当编译器知道数组的边(例如n的情况)时,请改为这样做:n[sizeof(n) - 1] = '\0';
。
顺便说一下,您不能在C中使用变量来设置数组长度,而在C ++中,可能需要len才能将const实例化数组。
此外,请以后发布您的确切错误消息。实际上,请编辑您的答案并立即添加,以帮助答案者和将来的读者。
注:通过电话回答,所以我无法根据自己的意愿进行测试或测试。也许我可以稍后再讨论以改善答案。
答案 1 :(得分:1)
简单的答案是您应该
使用“ \ 0”代替“ \ 0”
因为n是一个字符数组,您应该使用单引号而不是双引号
希望这会有所帮助
答案 2 :(得分:1)
字符数组元素的分配应仅包含字符,但在这种情况下,您将分配给字符串。请注意,“ / 0”是字符串。尝试使用分配给“ / 0”。