我正在尝试从字符串(类)的开头修剪空白。由于某种原因,每次我运行代码时,都会收到一条错误消息,并且我不知道如何解决它。
void format_classes(string& classes)
{
int n = classes.length();
for (int i=0; i<n; i++)
{
if(classes[i] != ' ')
{
classes.erase(classes[0], classes[i]);
break;
}
}
}
上面的代码将收到类似
" PhySiCS 101 lAB"
的内容,我必须返回它而没有前面的空格。我收到的错误消息是:
抛出一个'std :: out_of_range'实例之后的调用终止():basic_string :: erase
我对编码仍然很陌生,因此可能会向正确的方向提示而不是答案,以便我可以从错误中学习。
最佳答案
erase()
采用起始位置和长度。也就是说,数字。您在这些位置传递了字符。因此,如果字符串是:
" foo"
您基本上是在说:
classes.erase(' ', 'f');
要么
classes.erase(32, 102);
肯定超出了5个字符的字符串范围。
尝试:
classes.erase(0, i);
关于c++ - for语句超出范围错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26920645/