【问题标题】:string subscript out of range字符串下标超出范围
【发布时间】:2015-03-31 01:58:36
【问题描述】:

我正在尝试在另一个单词之后显示准确的单词,它有 8 个字符。不幸的是,显示字符串下标超出范围的错误。我知道问题出在循环上,但我不知道如何解决。为什么 "line[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

我解决了。问题出在不同的地方。非常抱歉,下次我会三思而后行。感谢您的帮助

【问题讨论】:

  • 您意识到没有什么可以限制j 变量越过字符串的末尾。
  • 使用笔和纸,以 10 个字符的字符串为例,pos 变量将设置为 0。此外,字符串中没有 '('。
  • 我愿意,但是符号“(”在第 21 位的行(我的字符串)中,然后它应该会中断循环
  • “它应该打破循环”,如果字符串中没有'('怎么办?你的程序是否生成了字符串?它是一个常量吗?如果不是,那么你就不能相信它的内容。

标签: c++ arrays string loops


【解决方案1】:

字符串中可能没有'('。在这种情况下,您不断增加j 变量而不检查j 变量是否超过line.length()

我建议添加一个 and 条件来检查j 是否超过了字符串的长度。

编辑 1:再次搜索 你能避免循环并使用:

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

【讨论】:

  • 但是有!我的字符串:INSTANCE Schutzring_Geschosse2(C_Item)
  • 然后使用调试器找出它没有失败的原因。提示:在循环中添加打印语句,打印出j的值和字符串的长度。
  • 如果在你的字符串某处正好有 9 的倍数处有一个 '(',那么它应该可以工作....但是正如建议的那样,它可能在其他位置......是吗正好是 9 的倍数??
猜你喜欢
  • 2013-04-22
  • 2012-04-27
  • 1970-01-01
  • 2018-02-28
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多