这是我的功能
string chopstring(string& tocut, List test[26]){
string totoken = "";
while(tocut[0] == ' ' || tocut[0] == 10 || tocut[0] == 13){
tocut.erase(0);
}
int finish = 0;
finish = tocut.find(" ", 0);
if (finish == string::npos){
cout << "NPOS!" << endl;
for(int i = 0 ; i < 26; i++)
test[i].Print();
}
for (int i = 0; i < finish; i++){
totoken += tocut[i];
}
string::iterator start = tocut.begin();
string::iterator end = tocut.begin() + totoken.length();
tocut.erase(start, end);
return tokenize(totoken);
}
我遇到了字符串:: erase的问题。它删除整个字符串?有什么建议?我也想了解原因,如果你知道,请解释一下。
在另一个将返回的令牌存储在链表中的函数中调用它,然后再次调用此函数,直到字符串(tocut)为空。它输入的第一行是 “时间旅行者(因为这样可以方便地谈论他)”。 现在发生的事情是,它需要第一个“The”,标记它,并且它是真的,但是tocut.erase(开始,结束),删除整个字符串,并导致程序崩溃。
答案 0 :(得分:4)
请执行以下操作:
while(tocut[0] == ' ' || tocut[0] == 10 || tocut[0] == 13){ tocut.erase(0,1); // see cpp reference. For single argument it takes iterator }
答案 1 :(得分:3)
ArunMu是对的。但是,如果我没有弄错,另一个问题是,当函数到达string :: npos时,它不会结束。相反,它继续向下调用erase(),而erase(start,string :: npos)确实删除了整个字符串的其余部分。