在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()有相同的错误......
此致
文森特
答案 0 :(得分:2)
阅读错误讯息!它告诉您,您尝试将单个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;
}
}
}