【发布时间】:2016-07-25 12:38:34
【问题描述】:
鉴于此代码:
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 包含:
- “一个”
- “b”
- “c”
当我运行代码时,我得到:
- “一个”
- “b,c”
- “c”
我在这个现场示例中打印了调试信息:http://ideone.com/fx3uC9
这是一个错误吗?我在 gcc 和 Visual Studio 中看到它,所以这似乎是我做错了。
【问题讨论】:
-
这就是调试器的用途。这是一个非常简短、简单、琐碎的算法。使用调试器单步执行代码,一次一行,每次循环。检查所有这些变量的值。看看他们指向什么。阅读
std::string方法的描述,以及每个参数应该是什么。想办法。了解如何使用调试器是每个 C++ 开发人员必备的技能。 -
substr()的第二个参数是长度,而不是索引。 -
可能与过去时代提出的问题重复:stackoverflow.com/q/12827030/2642059
标签: c++ string visual-studio gcc substr