程序工作的组成部分放在一起时不起作用

时间:2010-07-07 03:51:13

标签: c

我正在尝试完成项目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;
}

1 个答案:

答案 0 :(得分:4)

参数的sizeof不是指向的字符串的字符数,因为尽管参数声明形式,但它只是一个指针而不是一个数组。请改用strlen,注意它在返回值中不包含终止\0(与应用于字符串数组时的sizeof相对)。

如果您只使用"989010"的前三个字符,则字符串"989"看起来像一个回文。由于sizeof应用于指针会在您的计算机上产生4,因此只检查前三个字符。