C ++ string :: erase удаляет всю строку? - PullRequest
0 голосов
/ 24 февраля 2012

ТАК в моей функции

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);
}

У меня проблемы со строкой :: стереть. Удаляет всю строку? Какие-либо предложения? Я тоже хотел бы узнать причину, поэтому, пожалуйста, объясните, если знаете.

он вызывается в другой функции, которая хранит возвращенный токен в связанном списке, затем вызывает эту функцию снова, пока строка (tocut) не станет пустой. Первая строка это «Путешественник во времени (так о нем будет удобно говорить)». Сейчас происходит то, что он берет первое «The», токенизирует его и делает свое дело, но tocut.erase (start, end) удаляет всю строку и вызывает сбой программы.

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

Do ниже:

    while(tocut[0] == ' ' || tocut[0] == 10 || tocut[0] == 13){
        tocut.erase(0,1);   // see cpp reference. For single argument it takes iterator
    }
3 голосов
/ 24 февраля 2012

АрунМу прав.Но если я не ошибаюсь, дополнительная проблема заключается в том, что когда функция достигает строки :: npos, она не заканчивается.Вместо этого он продолжается до того места, где сделан вызов функции erase (), и erase (start, string :: npos) действительно удаляет весь остаток строки.

...