2016-01-19 145 views
0

目前國內做在大學的一個項目第一,其中在我需要去斷字的字符串,似乎很簡單但是當我運行該程序具有WeirdPuncProgram.exe: Microsoft C++ exception: std::out_of_range at memory location 0x004EF898爲什麼我在這裏得到一個out_of_range異常?

也不能正常返回的字符串值,裏面的錯誤函數answer()被改變並且連字符被刪除,但一旦它再次出現它的原始輸入。

#include <iostream> 
#include <string> 

using namespace std; 

string answer; 

string hyphonRemover(string answer) 
{ 
    string spacer = " "; 
    int h; 
    for (int i = 0; i < answer.length(); i++) 
    { 
     h = answer.find_first_of("-"); 
     answer.replace(h, 1, spacer); 
    } 
    return answer; 
} 


int main() 
{ 

    cout << "Type a sentence which contains punctuation and ill remove it for you! " << endl << endl; 
    getline(cin, answer); 
    hyphonRemover(answer); 
    cout << answer << endl; 
    system("pause"); 
    return 0; 

} 
+2

你不檢查是否'answer.find_first_of(「 - 」);'返回一個負數,如果沒有找到匹配就會發生這種情況。使用負數索引會在下一行中造成麻煩。 –

+1

此外,您可以調用'hyphonRemover',然後丟棄結果而不進行存儲。 – PeterT

回答

1

hyphonRemover()每次使用的answer將是局部變量,而不是全球answer你上面所定義。

因此該函數將只修改其局部變量。

+1

這是真的,但它不是一個問題的答案:) – DawidPi

相關問題