Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost::spirit匹配单词_C++_Parsing_Boost_Boost Spirit - Fatal编程技术网

C++ 使用boost::spirit匹配单词

C++ 使用boost::spirit匹配单词,c++,parsing,boost,boost-spirit,C++,Parsing,Boost,Boost Spirit,我想创建一个解析器,它将恰好匹配字符串中的两个字母数字单词,例如: message1 message2 然后将其保存到std::string类型的两个变量中 我已经读过这篇文章,它似乎需要无数次的重复,它使用了以下解析器: +qi::alnum % +qi::space 但是,当我尝试这样做时: bool const result = qi::phrase_parse( input.begin(), input.end(), +qi::aln

我想创建一个解析器,它将恰好匹配字符串中的两个字母数字单词,例如:

message1 message2
然后将其保存到std::string类型的两个变量中

我已经读过这篇文章,它似乎需要无数次的重复,它使用了以下解析器:

+qi::alnum % +qi::space
但是,当我尝试这样做时:

 bool const result = qi::phrase_parse(
            input.begin(), input.end(),
            +qi::alnum >> +qi::alnum,
            +qi::space,
            words
    );
单词
向量包含不同字符串中的每个字母:

't'
'h'
'i'
's'
'i'
's'
这是非常违反直觉的,我不知道为什么会发生这种情况。有人能解释一下吗

另外,我可以有两个预定义的字符串来代替std::vector来填充吗


最后一点注意:我希望避免使用语句,因为我希望清楚地定义每个名称空间,以帮助我理解Spirit是如何工作的

是的,但在您对其采取行动之前,跳过程序会忽略空白

使用
lexeme
控制跳绳器:

bool const result = qi::phrase_parse(
        input.begin(), input.end(),
        qi::lexeme [+qi::alnum] >> qi::lexeme [+qi::alnum],
        qi::space,
        words
);
注意,跳过符应该是
qi::space
,而不是
+qi::space

另见