2015-01-31 236 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:九是“实例”+空格键内的多个字符