为什么string::substr行为不端
Why Is string::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
包含:
- "a"
- "b"
- "c"
当我运行代码时,我得到:
- "a"
- b,c
- "c"
我在这个实际示例中打印出了调试信息:http://ideone.com/fx3uC9
这是个虫子吗?我在gcc和Visual Studio中看到了它,所以这似乎是我做错了什么。
如果您阅读了substr()
的文档,则签名为:
basic_string substr( size_type pos = 0,
size_type count = npos ) const;
第二个参数不是结束的位置(就像<algorithm>
中的其他函数一样,它占用一个范围),而是子字符串的长度。因此,如果将finish
作为端点,则需要将finish - (start + 1)
作为长度。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- arr[-1]在c++中的奇怪行为
- 继承期间显示未知行为的子类
- 如何在c++中使用引用实现类似python的行为
- G锁定铸造到基础上会释放模拟行为
- 在C++中对T*类型执行std::move的意外行为
- std::当在256字节边界上写入整数时,流的奇怪行为
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 奇怪的构造函数行为
- 重载运算符new[]的行为取决于析构函数
- 不同语言中相同代码的不同行为
- 处理除以零会导致<csignal>意外行为
- 试图理解类对象的行为
- C++ 如果语句行为不端
- C++ getline(cin,变量)行为不端.网站上没有任何解决方案有帮助
- C++中的神秘:函数调用行为不端只是因为存在另一个函数调用,即使它们是不相关的
- searchtree类的insert函数行为不端
- 是什么导致互斥对象行为不端
- 为什么string::substr行为不端