鉴于此代码:
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中看到它,所以看起来我做错了。
答案 0 :(得分:3)
如果您阅读substr()
的文档,则签名为:
basic_string substr( size_type pos = 0,
size_type count = npos ) const;
第二个参数不是结尾的位置(就像<algorithm>
中的每个其他函数都采用一个范围),它是子字符串的长度。因此,如果您将finish
作为结尾,则需要finish - (start + 1)
作为长度。