如何在C++中正确地返回运算符(*,/,-,+)
How to properly return an operator (*,/,-,+) in C++?
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());
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 如何防止clang格式在流运算符调用之间添加换行符<<