使用具有不同参数的Boost Tokenizer escaped_list_separator

Ann*_*ajb 4 c++ string boost tokenize

您好我一直在尝试使用boost库tokenizer类来使用tokenizer.我在boost文档中找到了这个教程:

http://www.boost.org/doc/libs/1 _36 _0/libs/tokenizer/escaped _list _separator.htm

问题是我不能让参数逃脱_list _separator("","","");

但如果我修改boost/tokenizer.hpp文件就可以了.但那并不是理想的解决方案,想知道是否有任何我想要的东西,以便在转义的_list _separator中获得不同的参数.

我想把它拆分为空格,用"和"表示转义,并且在引用的字符串中没有转义字符.

这用于在游戏控制台系统中进行参数解析系统.


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 tokenizer<escaped_list_separator<char>(separator1,separator2,separator3)> tok(s); for(tokenizer<escaped_list_separator<char>(separator1,separator2,separator3)>::iterator beg=tok.begin(); beg!=tok.end();++beg) { cout << *beg << "\n"; } }

visual studio 2005的错误是错误C2974:'boost :: tokenizer':'TokenizerFunc'的模板参数无效,类型预期

编辑:这个问题由ferrucio认可,并由彼得谢谢的所有人解释.

Fer*_*cio 15

试试这个:

#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";
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 可以在输出中保留```,例如`exec | script1 |"脚本参数第一个"`? (2认同)

pk.*_*pk. 5

您似乎错误地声明了标记器类型。

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"; }
Run Code Online (Sandbox Code Playgroud)

您希望boost::tokenizer< boost::escaped_list_separator< char > >使用boost::escaped_list_separator< char >分隔符对象作为其 TokenizerFunc来创建类型化对象。