C++ 正则表达式在不使用时取等号';我不这么认为';它应该在c++;
所以我应该接受用户输入并计算用户输入是否是有效的中缀表达式。我只接受C++ 正则表达式在不使用时取等号';我不这么认为';它应该在c++;,c++,regex,eclipse,c++11,C++,Regex,Eclipse,C++11,所以我应该接受用户输入并计算用户输入是否是有效的中缀表达式。我只接受+-/*()和数字。 所以最简单的方法就是使用正则表达式 这是我的正则表达式:[\(\)\d\+-\/\*]+。 我也试过:[\(\)0-9\+\-\/\*]+以及 [\(\)[:数字:\+\-\/\*]+ 我也尝试过不使用转义字符,但仍然得到相同的结果 问题是,当我将=作为表达式时,它会传递 代码如下: cout<<"Enter the infix expression: "; cin>>userInp
+-/*()
和数字。
所以最简单的方法就是使用正则表达式
这是我的正则表达式:[\(\)\d\+-\/\*]+
。
我也试过:[\(\)0-9\+\-\/\*]+
以及
[\(\)[:数字:\+\-\/\*]+
我也尝试过不使用转义字符,但仍然得到相同的结果
问题是,当我将=
作为表达式时,它会传递
代码如下:
cout<<"Enter the infix expression: ";
cin>>userInput;
regex infix ("[\(\)\d\+\-\/\*]+");
while(cin.fail()||regex_match(userInput,infix)){
cin.clear();
cin.ignore(256, '\n');
cout<<"Error: Not a valid infix expression!\n";
cout<<"Enter the infix expression: ";
cin>>userInput;
}
cout<<"Valid expression!\n";
预期产出:
Enter the infix expression: =
Error: Not a valid infix expression!
如果您需要更多代码,请告诉我。固定正则表达式声明如下所示
regex infix(R"([()\d+/*-]+)");
或者,如果无法使用原始字符串文字:
regex infix("[()\\d+/*-]+");
看
请注意,介于+
和/
之间的连字符,无论是否转义,都会在这两个符号之间创建一个范围。另外,\d
在常规字符串文字中必须看起来像\\d
,在原始字符串文字中必须看起来像\d
/
符号不必转义
此外,必须调整逻辑以返回适当的错误消息/行为:
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main() {
string userInput = "=";
regex infix(R"([()\d+/*-]+)");
if(regex_match(userInput,infix)){
cout<<"Valid expression!\n";
} else {
cout<<"Error: Not a valid infix expression!\n";
}
return 0;
}
// => Error: Not a valid infix expression!
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串userInput=“=”;
正则表达式中缀(R“([()\d+/*-]+)”;
if(regex_匹配(userInput,中缀)){
CUTI从来没有在C++中做过正则表达式,但是在其他语言中,当使用方括号时,你不必逃避大多数字符,但是<>代码> -/Cub需要结束。我会尝试<代码> [[(+] /*\D- ] ] /<代码>我认为反斜杠字符本身必须被转义,不是吗?<代码>”[(+)+/\\d- ]。
你意识到正则表达式永远不会验证中缀表达式吗?@NetMage你的意思是我应该使用!
来代替吗?我也尝试过,但是它不接受有效的表达式,例如3*4
我打赌你需要正则表达式中缀([()\\d+/*-]+);
。注意啊,我明白了。谢谢,我还认为代码逻辑有问题。是的,我不得不调整while条件。谢谢。
#include <iostream>
#include <string>
#include <regex>
using namespace std;
int main() {
string userInput = "=";
regex infix(R"([()\d+/*-]+)");
if(regex_match(userInput,infix)){
cout<<"Valid expression!\n";
} else {
cout<<"Error: Not a valid infix expression!\n";
}
return 0;
}
// => Error: Not a valid infix expression!