Учитывая этот код:Почему строка :: substr Misbehaving?
auto str = "a,b,c"s;
vector<string> tokens;
string::size_type start = -1;
string::size_type finish = str.find(',');
do {
tokens.push_back(str.substr(start + 1, finish));
start = finish;
finish = str.find(',', start + 1);
} while (start != string::npos);
Я бы ожидать tokens
содержать:
- "а"
- "б"
- "с"
Когда я бегу код, однако я получаю:
- «а»
- «б, в»
- «с»
Я распечатал информацию об отладке в этом живом примере: http://ideone.com/fx3uC9
Является ли это ошибка? Я вижу это в gcc и Visual Studio, поэтому кажется, что я сделал что-то неправильно.
Для этого нужен отладчик. Это очень короткий, простой, тривиальный алгоритм. Используйте свой отладчик для перехода по коду, по одной строке за раз, каждый раз через цикл. Изучите значения всех этих переменных. Посмотрите, на что они указывают. Прочтите описание методов 'std :: string' и каждого параметра. Объясните это. Знание того, как использовать отладчик, является обязательным навыком для каждого разработчика C++. –
Второй аргумент 'substr()' является * длиной *, а не индексом. –
Возможный дубликат вопроса, заданного в прошлую эпоху, когда вопросы были поддержаны: http://stackoverflow.com/q/12827030/2642059 –