C++ 有没有办法将运算符转换为字符+&引用;输入实际运算符进行算术运算?
如何将字符“+”转换为+进行加法?我正在尝试让用户输入运算符+-*/然后打印运算符b 我可以只做一堆if语句,但我想知道是否有一种方法可以更有效地做到这一点C++ 有没有办法将运算符转换为字符+&引用;输入实际运算符进行算术运算?,c++,C++,如何将字符“+”转换为+进行加法?我正在尝试让用户输入运算符+-*/然后打印运算符b 我可以只做一堆if语句,但我想知道是否有一种方法可以更有效地做到这一点 if (operator == "+") {cout << a + b;} else if (operator == "-") {cout << a - b;} if(operator==“+”{cout可以使用带有函数指针的映射 int addition(int a, int b){ return a + b
if (operator == "+") {cout << a + b;}
else if (operator == "-") {cout << a - b;}
if(operator==“+”{cout可以使用带有函数指针的映射
int addition(int a, int b){
return a + b;
}
std::map<char, int(*)(int, int)> operators;
operators.insert(make_pair('+', addition));
char c = getch();
int first_operand = 10;
int second_operand = 20;
int result = operators[c](first_operand, second_operand);
int加法(int a,int b){
返回a+b;
}
std::map操作符;
insert(make_pair('+',addition));
char c=getch();
int第一个操作数=10;
int第二个操作数=20;
int result=运算符[c](第一个操作数,第二个操作数);
您可以使用带有函数指针的映射
int addition(int a, int b){
return a + b;
}
std::map<char, int(*)(int, int)> operators;
operators.insert(make_pair('+', addition));
char c = getch();
int first_operand = 10;
int second_operand = 20;
int result = operators[c](first_operand, second_operand);
int加法(int a,int b){
返回a+b;
}
std::map操作符;
insert(make_pair('+',addition));
char c=getch();
int第一个操作数=10;
int第二个操作数=20;
int result=运算符[c](第一个操作数,第二个操作数);
我认为在这种情况下使用开关更好。否则,解决方案对我来说似乎没问题。我认为在这种情况下使用开关更好。否则,解决方案对我来说似乎没问题。使用开关时,假设令牌
是一个字符,其中包含运算符,op1
和op2
是两个操作数:
switch (token)
{
case '/':
val = op1 / op2;
break;
case '*':
val = op1 * op2;
break;
case '+':
val = op1 + op2;
break;
case '-':
val = op1 - op2;
break;
}
使用一个开关,假设标记
是一个字符,从中可以得到运算符,op1
和op2
是两个操作数:
switch (token)
{
case '/':
val = op1 / op2;
break;
case '*':
val = op1 * op2;
break;
case '+':
val = op1 + op2;
break;
case '-':
val = op1 - op2;
break;
}
你也可以使用这样的地图,我认为在这种情况下效率并不重要
cout << operators[op](a, b);
cout你也可以使用这样的地图,我认为在这种情况下效率并不重要
cout << operators[op](a, b);
cout对于一个简单的表达式解析器来说,它不会变得比这简单得多。而且simple很好,因为它可以让您的程序保持可维护性。IMO simple在大多数情况下都是高效的。声明:char op;
然后使用if(op='+'){etc}
您当前的解决方案效率低吗?您分析过它并确定了问题吗“一堆if语句"成为瓶颈?我希望你知道操作符是一个关键词。看起来像。你想做什么?写一个LR解析器来计算表达式?一个语言解释器?对于一个简单的表达式解析器,它不会变得比这简单得多。简单是好的,因为它可以让你的程序保持可维护性。IMO simple trumps在大多数情况下都是有效的。声明:char op;
然后使用if(op='+'){etc}
您当前的解决方案是否效率低下?您是否分析了它并确定了“一堆if语句”成为瓶颈?我希望你知道操作符
是一个关键词。看起来像。你想做什么?写一个LR解析器来计算表达式?一个语言解释器?尽可能选择列表初始化!或者一个std::function
的映射,并利用std::plus
等。@juanchopanza:不仅仅是std::plus
,而不是std::plus
(来自C++14)在这种情况下,它选择了一个更通用的专门化。@Nawaz我编辑了我的评论,以澄清这一点。我不知道有任何专门化。它是一个类模板,所以如果没有
@juanchopanza不知道std::plus
等,我看不出如何使用它。谢谢!如果可能,我更喜欢列表初始化le!或std::function
的映射,并利用std::plus
等。@juanchopanza:不仅仅是std::plus
,而是std::plus
(来自C++14)在这种情况下,它选择了一个更通用的专门化。@Nawaz我编辑了我的评论以澄清它。我不知道有任何专门化。它是一个类模板,所以如果没有
@juanchopanza不知道std::plus
等,我看不出它如何使用。谢谢!