3

编辑 - 谢谢大家的帮助。我什至没有想过要做switch语句。出于某种原因,我一直认为 C++ 与 Java 有很大不同......它通过一个开关产生了很多意义......感谢您引起我的注意。

我将如何正确返回运算符并在返回后使用它?我编写了一个函数来从输入中获取运算符并检查以确保其有效输入..这是我为此编写的代码(我称它为医生,因为我猜运算符是 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;

除了那个操作员之外,我什么都可以工作......我如何让它做它需要做的事情......换句话说,如果它是*然后乘以等等......

对不起,如果这是基本的,但我是 C++ 的新手,谷歌搜索这个并没有产生结果......

谢谢!

4

7 回答 7

2

好吧,无论如何您都必须比较字符。但更短的方法是使用(如果你有signin char

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";
于 2012-10-05T11:11:02.730 回答
1

一个经典的方法是在这里使用 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;
    }
}
于 2012-10-05T11:14:58.563 回答
0

编写另一种计算方法并调用它:

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());
于 2012-10-05T11:17:07.843 回答
0

您可以像在获取输入流的函数中一样使用它:

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;
于 2012-10-05T11:14:24.057 回答
0

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

于 2012-10-05T11:14:43.260 回答
0

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

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

等等(或者更好的是,在开关情况下都这样做,就像我的其他回答者提出的那样),尽管更好的方法是创建一个解析字符串并在内部存储运算符信息(作为枚举)的类。给它一个方法,将运算应用于两个数字并返回结果,并实现另一个方法以将文本表示形式作为字符串返回。然后,您将数据与视觉呈现分离。(不要忘记接受字符串并从中提取所需运算符的方法;))

于 2012-10-05T11:16:03.633 回答
0

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

于 2012-10-05T11:16:08.110 回答