我正在尝试从字符串(类)的开头修剪空白。由于某种原因,每次我运行代码时,都会收到一条错误消息,并且我不知道如何解决它。

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/

10-12 16:06