在迭代器上使用regex_match()和c ++中的字符串

时间:2017-05-25 16:35:19

标签: regex c++11 iterator char

在c ++项目上工作,我需要迭代一个字符串(或char *取决于你可以提供给我的解决方案!)。所以基本上我这样做:

void Pile::evalExpress(char* expchar){
    string express = expchar
    regex number {"[+-*/]"};

    for(string::iterator it = express.begin(); it!=express.end(); ++it){
        if(regex_match(*it,number)){
            cout<<*it<<endl;
        }
    }
}

char expchar[]="234*+";
Pile calcTest;
calcTest.evalExpress(expchar);

迭代器运行良好(我可以在if语句上面放一个cout&lt;&lt;&lt; * it&lt;&lt;&lt;'endl并获得正确的输出)

然后当我尝试编译时:

error: no matching function for call to 'regex_match(char&, std::__cxx11::regex&)'
    if(regex_match(*it,number)){
                             ^

我不知道为什么会发生这种情况,我试图不使用迭代器并直接在expchar [i]上迭代,但我和regex_match()有相同的错误......

此致

文森特

1 个答案:

答案 0 :(得分:2)

阅读错误讯息!它告诉您,您尝试将单个char传递给regex_match,这是不可能的,因为它需要字符串(或其他字符序列)而不是单个字符。

您可以改为if (std::regex_match(it, it+1, number))。这就是搜索从itit+1的字符序列(即长度为1的序列)。

您还可以避免创建string并直接迭代char*

void Pile::evalExpress(const char* expchar) {
    std::regex number {"[+-*/]"};

    for (const char* p = expchar; *p != '\0'; ++p) {
        if (regex_match(p, p+1, number)) {
            cout<<*p<<endl;
        }
    }
}