2015-11-02 85 views
0

有一個簡單的問題。字符串迴文功能

所以我試圖在我的「初學者」程序之一中設計一個迴文函數。

對於那些不知道迴文是什麼,基本上它是一組字符(通常是一個字,但也可能是數字 - 雖然在這種情況下是特定的詞),它是拼寫相同的方式向後和向前。迴文的

示例 - 哇,哈哈,aaafaaa,...

所以你得到了點。於是我開始與我的功能

int palindrome(char input[]){

所以我的推測是,在理想情況下我會希望通過與指數串運行,並通過信函進行比較信。

int palindrome(char input[]){ 
int start = 0, length = 0, end; 
/* Until we reach end of the word */ 
while (input[start++] != '\0'){ 
    length++; 

    for(start = 0, end = length - 1; start = length/2; end--){ 
    /*If they do not match, return 0 */ 
    if (input[start] != input[end]){ 
     return 0; 
     break; 
    } 
    } 
} 
return 1; 
} 

這就是我的迴文函數的樣子。現在我只想檢查標準stdin的用戶輸入。

所以我的主要功能如下所示

int main(){ 
char uInput[30]; 

/* Welcome user */ 
printf("Hello, please enter some text \n); 
scanf("%29s", uInput); 

if palindrome(uInput){ 
printf("The word: %s is a palindrome \n", uInput); 
} 

else { 
printf("The word: %s is not a palindrome \n", uInput); 
} 

return 0; 
} 

所以非常簡單的代碼存在,不幸的是,我的結果是

「這個詞(字)不是迴文」

無論它是否是迴文序列,都可以使用

所以我的功能可能完全有問題。另外我知道這可以通過其他庫如string.h和其他庫來完成,但我個人更喜歡這樣做,因爲它是一種練習形式,而不是使用預定義的函數。

所以是的,我有一個強烈的懷疑,我沒有在函數中正確使用我的返回值,但我不完全確定它們的實際錯誤是什麼。

+1

你不需要在'for'循環中移動'start'嗎? –

+0

'如果迴文(uInput){'沒有編譯器給出這個警告嗎? – ameyCU

+0

發佈你已經測試過的真實代碼,你在這裏會給出各種編譯錯誤。 – interjay

回答

1

裏有迴文功能

我們可以用一個循環,而不是在一個循環內循環做多的錯誤。還要注意for循環的終止條件start != (length/2)startend的增量。

修復了一些編譯錯誤。完整的代碼如下。

#include <stdio.h> 
int palindrome(char input[]){ 
int start = 0, length = 0, end; 

/* Until we reach end of the word */ 
while (input[length] != '\0') 
    length++; 

for(start = 0, end = length - 1; start != (length/2); start++, end--){ 
/*If they do not match, return 0 */ 
    if (input[start] != input[end]){ 
     return 0; 
    } 
} 

return 1; 
} 

int main(){ 
char uInput[30]; 

/* Welcome user */ 
printf("Hello, please enter some text \n"); 
scanf("%29s", uInput); 

if (palindrome(uInput)){ 
printf("The word: %s is a palindrome \n", uInput); 
} 

else { 
printf("The word: %s is not a palindrome \n", uInput); 
} 
return 0; 
} 
1

你的想法是正確的,只有一些錯別字和省略。

您的循環是錯誤的,它應該是:

for(start = 0, end = length - 1; start != length/2; start++, end--) 

代替:

for(start = 0, end = length - 1; start = length/2; end--) 

而且while循環包括整個for循環以及這完全是無稽之談。 這應該只是:

while (input[start++] != '\0') 
    length++; 

}return 1應該被刪除。

而且int start = 0是沒有必要的,你在for循環反正開始初始化start; int start就夠了。但這不是一個真正的錯誤。