【问题标题】:Using regex_match() on iterator with string in c++在 C++ 中使用带有字符串的迭代器上的 regex_match()
【发布时间】:2017-10-26 09:40:15
【问题描述】:

在一个 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

然后当我尝试编译时:

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

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

问候

文森特

【问题讨论】:

    标签: regex c++11 iterator char


    【解决方案1】:

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

    你可以改用if (std::regex_match(it, it+1, number))。也就是说要搜索从 it 到 it+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;
            }
        }
    }
    

    【讨论】:

    • 您好,感谢您的回答。我对 'char&' 中的 & 有点困惑......我认为即使有一个字符,它仍然是 char* 但显然不是。
    • 这意味着它是对char 的引用。获取good book on C++。
    猜你喜欢
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2019-01-17
    • 2023-03-28
    • 2020-12-31
    • 2017-01-29
    相关资源
    最近更新 更多