对你们来说应该很容易.....
我正在玩使用Boost的tokenizer,我想创建一个逗号分隔的令牌.这是我的代码:
string s = "this is, , , a test";
boost::char_delimiters_separator<char> sep(",");
boost::tokenizer<boost::char_delimiters_separator<char>>tok(s, sep);
for(boost::tokenizer<>::iterator beg= tok.begin(); beg!=tok.end(); ++beg)
{
cout << *beg << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
This is
a test
Run Code Online (Sandbox Code Playgroud)
我得到的是:
This
is
,
,
,
a
test
Run Code Online (Sandbox Code Playgroud)
更新
我有这个代码:
#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; …Run Code Online (Sandbox Code Playgroud) 我试图将逗号分隔的字符串转换为const char*的向量.使用以下代码,按预期输出为
ABC_
DEF
HIJ
Run Code Online (Sandbox Code Playgroud)
但我明白了
HIJ
DEF
HIJ
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
码:
#include <iostream>
#include <boost/tokenizer.hpp>
#include <vector>
#include <string>
using namespace std;
int main()
{
string s("ABC_,DEF,HIJ");
typedef boost::char_separator<char> char_separator;
typedef boost::tokenizer<char_separator> tokenizer;
char_separator comma(",");
tokenizer token(s, comma);
tokenizer::iterator it;
vector<const char*> cStrings;
for(it = token.begin(); it != token.end(); it++)
{
//cout << (*it).c_str() << endl;
cStrings.push_back((*it).c_str());
}
std::vector<const char*>::iterator iv;
for(iv = cStrings.begin(); iv != cStrings.end(); iv++)
{
cout << *iv << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:解决方案帮助下面的答案:( …
我正在使用boost :: tokenizer来获取';' 从a分开的字段string.我可以检索下面代码中显示的字段,但我有两个问题:
a;b;c.以下代码将打印所有这些代码.但我也需要打印空字段.例如柜面字符串的a;;;b;c令牌也应该包含什么作为第二和第三元素.或者换句话说,第二和第三个标记应该是空的.#include <boost/tokenizer.hpp>
namespace std;
namespace boost;
int main()
{
string data="a;;;;b;c";
boost::char_separator<char> obj(";");
boost::tokenizer<boost::char_separator<char> > tokens(data,obj);
cout<<endl<<tokens.countTokens();
for(boost::tokenizer<boost::char_separator<char> >::iterator it=tokens.begin();
it!=tokens.end();
++it)
{
std::cout<<*it<<endl;
}
}
Run Code Online (Sandbox Code Playgroud)