C++ 有没有办法将运算符转换为字符+&引用;输入实际运算符进行算术运算?

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

如何将字符“+”转换为+进行加法?我正在尝试让用户输入运算符+-*/然后打印运算符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;
}

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
等,我看不出它如何使用。谢谢!