先给出出现该错误的原因,总的来说是因为迭代器iterator越界了,出现了这个错误的话大家可以找一下迭代器做循环的时候是否越界
我的错误代码和改正方法如下:
string ReverseSentence(string str) {
string str_new;
int wordlength = 0;
for (string::iterator iter = str.end() - 1; iter >= str.begin(); iter--)//错误就在这,到str的begin()了还继续进行自减操作
{
if (*iter != ' ' && iter != str.begin())
wordlength++;
else
{
if (iter == str.begin())
{
str_new.append(iter, iter + wordlength + 1);
wordlength = 0;
//break; //应该在这里添加设一个break,当遍历到字符串头部的时候跳出循环,这样就能避免越界了
}
else
{
str_new.append(iter+1, iter + wordlength + 1);
str_new.append(" ");
wordlength = 0;
}
}
}
return str_new;
}
原题如下,是牛客网上剑指offer专栏的题。
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?