如何在C++中正确地返回运算符(*,/,-,+)

How to properly return an operator (*,/,-,+) in C++?

本文关键字:运算符 C++ 返回 正确地      更新时间:2023-10-16

EDIT-感谢大家的帮助。我甚至没有想过做switch语句。出于某种原因,我一直认为C++与Java有很大不同。。。开关很有意义。。谢谢你引起我的注意。

如何正确地返回运算符并在返回后使用它?我编写了一个函数,从输入中获取运算符,并检查以确保其输入有效。。这是我为此编写的代码(我称之为doctor,因为我猜operator是C++中的保留名称,医生会做手术哈哈…对不起…只是太傻了)…:

string doctor()
{
string getDoc;
cin >> getDoc;
if (getDoc == "*")
return "*";
if (getDoc == "/")
return "/" ;
if (getDoc == "-")
return "-" ;
if (getDoc == "+")
return "+" ;
else 
{
cout << "You entered " << getDoc << " please only use +,-,*,/ : ";
return doctor();
}
}

当返回值时,我让main()执行以下操作(它将其返回到"操作"变量中…:

cout << firstNum << operation << secondNum << " is " << answer;

除了那个接线员,我什么都能用。。。我该如何让它做它需要做的事情…换句话说,如果它是a*,那么乘以等等…

很抱歉,如果这是基本的,但我是C++的新手,在谷歌上搜索没有结果。。。

谢谢!

无论如何,您都必须比较字符。但较短的方法是使用(如果char中有sign)

switch(sign) { 
case '*':
case '/':
case '+':
case '-':
string str; str += sign;
return str; 
default:
return "error message";
}

if(sign == "+" || sign == "-" || sign == "/" || sign == "*")
return sign;
else
return "Error message";

一种经典的方法是在这里使用switch case构造。你会得到一个"*",乘以参数,如果你得到了一个"/",那么除以。

double doctored(char operation, double arg1, double arg2) {
switch (operation) {
case '+': return arg1+arg2;
case '-': return arg1-arg2;
case '*': return arg1*arg2;
case '/': return arg1/arg2;
default:  // ignore
return arg1;
}
}

您可以使用与获取输入流的函数相同的方法来设置大小写:

float result;
switch(operation) {
case '*':
result = firstNum * secondNum;
break;
case '/':
result = firstNum / secondNum;
break;
case '+':
result = firstNum + secondNum;
break;
case '-':
result = firstNum - secondNum;
break;
}
cout << firstNum << operation << secondNum << " is " << result;

从返回的字符串中,您可以选择一个函数或可调用对象(functor)。例如,可以使用if-else,也可以使用std::map。然后使用函数或可调用对象,只需调用它

您可以像进行验证一样进行操作,即

if (operation == "*")
answer = firstNum *secondNum;

等等。(或者更好的是,在切换情况下同时执行这两种操作,就像我的回答者同事所建议的那样),尽管更好的方法是创建一个类来解析字符串并在内部存储运算符信息(作为枚举)。给它一个方法,对两个数字应用运算并返回结果,并实现另一个方法以字符串形式返回文本表示。然后,您就将数据与可视化演示脱钩了。(不要忘记获取字符串并从中提取所需运算符的方法;)

doctor(运算符)的使用取决于操作数,如果它们是类的实例,则必须为它们重载operator,否则我认为可以为每个运算符编写一个函数,该函数需要1,2,3个参数。当使用switch语句时,根据操作的值调用所需的函数并返回所需的结果

编写另一个进行计算的方法并将其称为:

float doDoctoryStuff(float a, float b, const char op)
{
switch(op) {
case '*':
return a * b:
break;
...
...
...
}
}

在您的主中

cout << firstNum << operation << secondNum << " is ";
cout << doDoctoryStuff(firstNum, secondNum, doctor().c_str());