【发布时间】:2013-06-09 16:42:24
【问题描述】:
我有这个代码:
#include <boost/tokenizer.hpp>
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
int main() {
using namespace std;
boost::char_separator<char> sep(",");
string s1 = "hello, world";
tokenizer tok1(s1, sep);
for (auto& token : tok1) {
cout << token << " ";
}
cout << endl;
tokenizer tok2(string("hello, world"), sep);
for (auto& token : tok2) {
cout << token << " ";
}
cout << endl;
tokenizer tok3(string("hello, world, !!"), sep);
for (auto& token : tok3) {
cout << token << " ";
}
cout << endl;
return 0;
}
此代码产生以下结果:
hello world
hello
hello world !!
显然,第二行是错误的。我期待的是hello world。问题是什么?
【问题讨论】:
-
我不确切知道标记器是如何工作的,但我希望这是一个范围问题。标记器可能只保留对字符串的引用,但字符串超出范围,因此在打印时是垃圾内存。
标签: c++ boost boost-tokenizer