C ++ string :: erase删除整个字符串?

时间:2012-02-24 04:52:10

标签: c++ string erase

这是我的功能

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(开始,结束),删除整个字符串,并导致程序崩溃。

2 个答案:

答案 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)确实删除了整个字符串的其余部分。