也许有人能告诉我这里发生了什么?
我的意图是在大括号上分割输入字符串:即:('或')'。
对于输入字符串“(well)hello(there)world”我希望返回4个令牌: well;你好;那里;世界
正如你从我下面的示例应用程序中看到的,我得到5个令牌(第1个是空字符串)。
有没有办法让这个给我只返回非空字符串?
#include <iostream>
#include <boost/algorithm/string.hpp>
#include <vector>
int main()
{
std::string in = "(well)hello(there)world";
std::vector<std::string> tokens;
boost::split(tokens, in, boost::is_any_of("()"));
for (auto s : tokens)
std::cout << "\"" << s << "\"" << std::endl;
return 0;
}
输出:
$ a.out
"" <-- where is this token coming from?
"well"
"hello"
"there"
"world"
我尝试使用boost::algorithm::token_compress_on
,但我得到的结果相同。
答案 0 :(得分:1)
是的,返回的第一个结果是紧接在第一个左括号之前的空集{}。行为符合预期。
如果您不想使用该结果,只需测试一个空的返回变量并将其丢弃。
要测试这是预期的行为,请在行尾添加一个括号,并在结尾处输入另一个空结果。 :)
答案 1 :(得分:0)
这个帖子有点旧,但这是更好的解决方案boost::token_compress_on
,请在boost::split