2013-04-17 38 views
1

我試圖編寫用於測試字符串的程序,如果它是迴文或不是,但我總是得到輸出,因爲它不是一個。我的代碼有什麼問題?在C中使用遞歸函數的迴文測試

#include <stdio.h> 
#include <string.h> 

int is_palindrome(int start, int end, char *str) 
{ 
    if (str[start] != str[end]) 
     return 0; 
    else if (start == end) 
     return 1; 
    else 
     return is_palindrome(++start, --end, str); 

    return 0; 

} 
int main() 
{ 
    char str[20]; 
    int length,start=0,end=length-1; 
    int result; 
    printf("Enter the String.\n"); 
    fgets(str, sizeof(str), stdin); 
    length = strlen(str); 

    if(is_palindrome(start,end,str)) 
     printf("It's a palindrome!\n"); 
    else 
     printf("It's not a palindrome! \n"); 
    return 0; 
} 
+1

逐行掃描調試器中的代碼。並且使用一個你知道的字符串是一個迴文,最好是一個短的字符串,因此它更快。 –

+4

'int length,start = 0,end = length-1;'長度在這裏沒有值(尚)。 – wildplasser

+0

'length'沒有設置任何東西,因此'end'是垃圾。 – eduffy

回答

1

你有兩個主要問題,

1)要初始化end使用length沒有先初始化length

length = strlen(str); 
/* initialize end here */ 

2)你不考慮你的換行符fgets

end = length - 2; /* don't include the newline */ 
+1

現在工作,謝謝! – Shail

3

++start--end傳給對方,會發生什麼?

else if (start == end) 

應該是>=

0

在這個is_palindrome()功能必須需要檢查它,否則它不會爲迴文詞

if(start>end) 
    return 1; 
0

的偶數性格上的線與if(start==end)有邏輯錯誤的工作。

這是由最後一次遞歸調用引起的,last和end的值將始終相同,即它們都將位於數組的中心。因此,函數is_palindrome()將始終返回1,並且輸出始終爲It's a palindrome!