我正在尝试完成项目Euler问题here.由于某种原因,我确定给定字符串是否为回文的函数认为“989010”是回文。有趣的是,如果我直接将该字符串输入回文函数,它就能正常运行。这是我的代码(我是一个新手,很抱歉格式不好!):
bool palindrome(char pal[]);
int main(){
int i = 0;
int j = 0;
int k = 0;
int numdig = 0;
int numtest = 0;
for(i = 999; i > 99; i--){
for(j = 999;j > 99; j--){ //for loops multiply all 3 digit numbers
k = i * j;
numtest = k;
numdig = 0; //this part takes care of determining the number of digits
while(numtest > 0){
numdig++;
numtest /= 10;
}
char string[numdig + 1];
itoa (k,string,10); //itoa turns an integer into a string w/ null char.
if( palindrome(string)){
printf("It is a palindrome: %i\n",k);
system("pause");
return 0;
}
}
}
return 0;
}
bool palindrome(char pal[]){
int half = (sizeof(pal) - 1)/2; //this divides the string in half
int forward = 0;
int backward = sizeof(pal)-2;
while(forward < half && backward > 0){ //compares the charactera in the front
if(pal[forward] == pal[backward]){ //to the chars in the back until they
forward++; //meet in the middle
backward--;
}
else{
return false;
}
}
return true;
}
答案 0 :(得分:4)
参数的sizeof
不是指向的字符串的字符数,因为尽管参数声明形式,但它只是一个指针而不是一个数组。请改用strlen
,注意它在返回值中不包含终止\0
(与应用于字符串数组时的sizeof
相对)。
如果您只使用"989010"
的前三个字符,则字符串"989"
看起来像一个回文。由于sizeof
应用于指针会在您的计算机上产生4
,因此只检查前三个字符。