使用提高分析器escaped_list_separator用不同的参数
题
你好我一直在试图获得一个分析器来工作中使用的提高图书馆分析器类。我发现了这个教程在提高文件:
http://www.boost.org/doc/libs/1 _36_0/libs/tokenizer/逃_list_separator.htm
问题是我不能获得参数的以逃脱_list_separator("","","");
但是,如果我修改的提升/分析器.hpp文件,它的工作。但这不是理想的解决方案是不知道如果有什么我失踪得到不同的参数进入逃_list_separator.
我想把它拆分上的空间"和'逃离并没有逃脱字的内部报串。
这是用于参数分析系统在一个游戏中的控制台系统。
include <iostream>
include <boost/tokenizer.hpp>
include <string>
int主()
{
使用的名字空间的性病;使用的名字空间的提升;string s="exec script1\"脚本参数数目的一个\"";串separator1("");//不让援引的论点逃脱自己
串separator2("");//分裂的空间
串separator3("\"\'");//让它具有援引的论据
tokenizer<escaped_list_separator<char>(separator1,separator2,separator3)>tok(s);对于(tokenizer<escaped_list_separator<char>(separator1,separator2,separator3)>::迭代求=托克.开始();求求!=托克.end();++求)
{
诉讼 << *乞求 << "
";}
}
错误visual studio2005是
错误C2974:'增::tokenizer':无效的模板的论据'TokenizerFunc',类型的预计
编辑:这个问题awnsered通过ferrucio和解释彼得感谢的每一个人。
解决方案
尝试这样:
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>
int main()
{
using namespace std;
using namespace boost;
string s = "exec script1 \"script argument number one\"";
string separator1("");//dont let quoted arguments escape themselves
string separator2(" ");//split on spaces
string separator3("\"\'");//let it have quoted arguments
escaped_list_separator<char> els(separator1,separator2,separator3);
tokenizer<escaped_list_separator<char>> tok(s, els);
for(tokenizer<escaped_list_separator<char>>::iterator beg=tok.begin(); beg!=tok.end();++beg)
{
cout << *beg << "\n";
}
}
其他提示
好像你没有正确地声明你的分词器类型。
typedef boost::tokenizer< boost::escaped_list_separator<char> > Tokenizer;
boost::escaped_list_separator<char> Separator( '\\', ' ', '\"' );
Tokenizer tok( s, Separator );
for( Tokenizer::iterator iter = tok.begin(); iter != tok.end(); ++iter )
{ cout << *iter << "\n"; }
您想使一个boost::tokenizer< boost::escaped_list_separator< char > >
类型对象与boost::escaped_list_separator< char >
分离器对象作为其TokenizerFunc。
一个相关但不是这个答案是,如果用户要输出双引号的结果,埋报价("")所描述的在维基百科(喜欢这里)应改为一串 (\\\")
, ,哪里 \\
意味着逃生的炭和 \"
指引的标记。在这种方式,报价的标志,将显示,在输出结果。以下代码是一个例子。
typedef boost::escaped_list_separator<char> std_token;
typedef boost::tokenizer<boost::escaped_list_separator<char>> tokenizer;
std_token a_token( "\\", ",", "\"" );
std::string s = "\"Boost,\\\" C++ Libraries\" ";
tokenizer tok{ s, a_token };
for ( const auto &t : tok )
std::cout << t << '\n';