2017-05-25 54 views
-1

在C++项目上工作时,我需要迭代一个字符串(或char *,具体取决于您可以提供给我的解决方案!)。所以基本上我这样做:在C++项目中使用iterator与字符串使用regex_match()

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); 

迭代器效果很好(我可以把COUT * < <“ENDL上述< <它的if语句,我得到一个正确的输出)

,然后当我尝试编译:

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

我不知道为什么会这样,我试着不使用迭代器,并直接在expchar [I]迭代,但我有regex_match同样的错误()。 ..

问候

文森特

回答

2

读取错误消息!它告诉你,你试图通过一个charregex_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; 
     } 
    } 
} 
+0

您好,谢谢您的回答。我对'char&'中的&有点困惑......我认为,即使有一个字符,它仍然是char *,但实际上并不是。 – Gozu09

+0

这意味着它是对'char'的引用。获取[关于C++的好书](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 –