在c++; 在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);

在c++; 在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);,regex,c++11,iterator,char,Regex,C++11,Iterator,Char,我不知道为什么会发生这种情况,我试图不使用迭代器直接在expchar[I]上迭代,但我在regex_match()上也有同样的错误 问候 Vincent阅读错误消息!它告诉您正在尝试将单个char传递给,这是不可能的,因为它需要字符串(或其他字符序列),而不是单个字符 如果(std::regex_match(it,it+1,number))则可以执行。也就是说,搜索从it到it+1的字符序列(即长度为1的序列) 您还可以避免创建字符串,并直接迭代字符* void Pile::evalExpres

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

问候


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

如果(std::regex_match(it,it+1,number))则可以执行
。也就是说,搜索从
it
it+1
的字符序列(即长度为1的序列)

您还可以避免创建
字符串
,并直接迭代
字符*

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;
        }
    }
}
void Pile::evalExpress(const char*expchar){
std::正则表达式编号{“[+-*/]”;
对于(常量字符*p=expchar;*p!='\0';++p){
if(正则表达式匹配(p,p+1,数字)){

coutHello,谢谢你的回答。我对“char&”中的“&”感到有点困惑…我认为即使有一个字符,它仍然是char*,但显然不是。这意味着它是对
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;
        }
    }
}