2017-01-18 78 views
-2

我想找到一個詞的迴文。這裏有什麼錯?尋找回文點

主要功能:

int size; 
    string input; 
    cin>>input; 
    size = input.length(); 
    if(testPalindrome(input,size-1,0)) 
    cout<<"It's Palindrome"; 
    else 
    cout<<"It's not Palindrome"; 

而且testPalindrome功能是:

bool testPalindrome (string pal , int last, int first){ 

    if (pal[first] != pal[last]) 
     return false; 
    else{ 
     if (first<last) 
      testPalindrome(pal,last-1,first+1); 
     else 
      return true; 
    } 
} 

我已閱讀this link,發現確定迴文答案,但爲什麼這個人是不工作?

+4

這聽起來像你可能需要學習如何使用調試器來步驟t通過你的代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+1

你的'testPalindrome'中有一些路徑不返回任何東西。這導致*未定義的行爲*。一個好的編譯器應該對你發出警告。 –

+2

請比「不工作」更具體。程序可以「無法工作」的方式無數。 – molbdnilo

回答

2

我想你忘記了return語句在函數

if (first<last) 
     return testPalindrome(pal,last-1,first+1); 
     ^^^^^^^ 

通常溫度範圍的第一個參數指定的較低值,第二個參數指定了未列入該範圍的任上限值範圍或序列中元素的數量。

而第一個參數應該聲明爲具有常量引用類型,因爲字符串本身沒有更改,您將轉義額外的內存分配。

遞歸函數可以寫成像

#include <iostream> 
#include <string> 

bool testPalindrome(const std::string &s, 
    std::string::size_type i, 
    std::string::size_type n) 
{ 
    return n < 2 || (s[i] == s[n-1] && testPalindrome(s, i + 1, n - 2)); 
} 

int main() 
{ 
    std::cout << testPalindrome("abba", 0, 4) << std::endl; 
    std::cout << testPalindrome("aba", 0, 3) << std::endl; 
    std::cout << testPalindrome("aa", 0, 2) << std::endl; 
    std::cout << testPalindrome("a", 0, 1) << std::endl; 
    std::cout << testPalindrome("ab", 0, 2) << std::endl; 

    return 0; 
} 

程序輸出是

1 
1 
1 
1 
0 

檢查類型std::string的對象是否是迴文的最簡單的方法是寫表達

s == std::string(s.rbegin(), s.rend()) 
6

您需要返回遞歸調用的結果,就像調用任何其他函數時一樣。

如果您不這樣做,則行爲未定義。