我正在尝试编写一个函数,它在我的主程序中,将比较用户输入的运算符的优先级。该函数将查找以下运算符:
+
,-
,*
,/
*
,/
具有最高优先级+
,{ {1}}具有最低优先级。
优先级最低的运算符位于堆栈的底部,而优先级最高的运算符位于堆栈的顶部。因此,如果用户输入-
,则应在终端中显示+-*/
。
关于我应该怎么做的任何想法?
答案 0 :(得分:4)
将所有运算符读入std::string
。编写具有以下类型的函数:
bool is_higher_precedence(char lhs, char rhs);
此函数应返回lhs
的优先级是否高于rhs
。
然后,您可以将此函数用作std::sort
的函数参数,以按优先级对运算符进行排序。
答案 1 :(得分:4)
只需使用std::sort
对自定义谓词进行排序。
int precedence(char op)
{
if (op == '*' || op == '/') return 0;
return 1;
}
bool comparePrecedence(char a, char b)
{
return precedence(a) < precedence(b);
}
int main()
{
char input[] = "+-/";
std::sort(input, input + 3, &comparePrecedence);
}
显然,您只需将其添加到precedence
函数中即可添加其他运算符。