stringstream str(line, ios_base::in);
while(!str.eof()){
string word;
str >> word;
std::transform(word.begin(), word.end(), word.begin(), ::tolower);
char c = *(--word.end());
char b = *word.begin();
if((c == ')' && b == '(') || (c == '\'' && b == '\'')){
word.erase(--word.end());
word.erase(word.begin()); //exception occurs here
}
c = *(--word.end());
if(c == ',' || c == '.' || c == '?' || c == '!')
word.erase(--word.end());
}
此代码在 word.erase(word.begin()); 处抛出 std::length_error (what(): basic_string::_S_create); 但是,如果我将其更改为 word.erase(0, 1); 它工作得很好。
这是为什么?
我正在使用 gcc 4.8.1(MinGW 构建)