2015-01-31 89 views
-1

我試圖顯示其他單詞後有8個字符的準確單詞。不幸的是,顯示字符串下標超出範圍的錯誤。我知道問題出在循環,但我不知道如何解決它。爲什麼「行[J]!=‘(’」這麼想的工作?字符串下標超出範圍

getline(myFile, line); 
size_t pos = line.find(arrayTypeOne[i]); //finding position 
if (pos != string::npos) 
{ 
    for (int j = pos + 9; line[j] != '('; j++) 
     cout << line[j]; 
}//if 

我下一次解決它。在不同的地方。我很抱歉,這個問題,我會三思而後行。感謝您的幫助

+3

你意識到沒有什麼限制'j'變量超過字符串的末尾。 – 2015-01-31 19:10:32

+1

使用筆和紙,以10個字符的字符串爲例,並且'pos'變量將被設置爲0.另外,字符串中沒有'(' – 2015-01-31 19:12:06

+0

我這樣做,但是一個符號「 (「是在21位置的線(我的字符串),然後它應該打破循環 – mathsicist 2015-01-31 19:13:33

回答

0

有一個可能的機會,不存在「(」中的字符串。在這種情況下,你不斷遞增j變量沒有檢查是否j變量已經過去line.length()

我建議增加一個的條件,你檢查是否j已超過字符串的長度。

編輯1:搜索再次 可以避開環路及用途:

line.find('(', pos + 1); 
+0

但是有我的字符串: \t實例Schutzring_Geschosse2(C_Item) – mathsicist 2015-01-31 19:15:51

+0

然後使用調試器來找出它沒有失敗的原因提示:在循環中添加一個print語句,輸出'j'的值和字符串的長度。 – 2015-01-31 19:17:23

+0

如果在你的字符串的某個地方有一個'('的正整數的倍數,那麼它應該和rk ....但正如所暗示的那樣,它可能位於其他某個位置......它是否恰好是9的倍數? – basav 2015-01-31 19:18:04

0

我應該道歉你,因爲我並沒有說符號「)」始終是字符串,如果條件「pos!= string :: npos」爲真。 我嘗試使用

j < line.find('(', pos + 1) 

改變我的代碼,但它仍然無法正常工作。 @basav:九是「實例」+空格鍵內的多個字符