2013-07-24 99 views
1

我正在編寫代碼來查找回文數字。我用這還學習如何編寫,這是我寫的代碼:libC++ abi.dylib:終止調用拋出異常中止陷阱:6

#include <iostream> 
#include <sstream> 
using namespace std; 

bool IsPalindromic (int n) { 
    int I; 
    string Number; //Starting to convert integer to string 
    ostringstream convert; 
    convert << n; 
    Number = convert.str(); //Conversion is complete 
    int M = Number.length(); 
    bool Result = true; 
    if (M % 2 == 0) 
     I = M/2; 
    else 
     I = (M - 1)/2; 
    for (int i = 1; i <= I; i++) { 
     if (Number.at(i) != Number.at(M-i+1)) 
      Result = false; 
    } 
    return Result; 
} 

int main(int argc, char *argv[]) { 
int num; 
cout << "Enter an integer:"; 
    cin >> num; 
    cout << IsPalindromic(num) << endl; 
    return 0; 
} 

但是當我嘗試運行它,然後輸入一個整數作爲輸入,我得到以下錯誤:

libc++abi.dylib: terminate called throwing an exception 
Abort trap: 6 

我在代碼的邏輯中找不到任何錯誤。你能幫我找出問題嗎? 我使用G ++在Mac OSX 10.8.4

+0

請注意,您不需要所有'if(M%2 == 0)'業務。簡單的'M/2'將爲奇數和偶數'M'完成,因爲整數除法忽略餘數。此外,您的支票應該從索引'0'開始,而不是'1'。 – juanchopanza

回答

1

在行編譯:

if (Number.at(i) != Number.at(M-i+1)) 

i = 1時您嘗試訪問Number.at(M)這是串出M的界限,而M是長度的字符串。相反,它應該是:

if (Number.at(i) != Number.at(M-i)) 
+0

這意味着字符串中的字符從'0'開始並轉到'M-1'。謝謝! – oxtay

+0

@ user2613064不僅在字符串。在數組和所有標準庫容器中。 – juanchopanza

相關問題