21xrx.com
2024-09-20 09:12:47 Friday
登录
文章检索 我的文章 写文章
C++ 简单表达式计算代码
2023-07-10 13:36:15 深夜i     --     --
C++ 简单表达式 计算代码

在现代编程语言中,计算器是非常常见的一个功能,它可以用来计算简单的算数表达式。在这篇文章中,我们将介绍使用 C++ 编写一个简单的表达式计算器的代码。

首先,我们需要读取用户输入的表达式。我们可以使用 C++ 标准库中的 `getline` 函数来完成。该函数读取一行输入,并将其存储在一个字符串中。

接下来,我们需要将输入转换成可执行的代码。这可以通过将表达式拆分成一个个标记(token)来完成。标记可以是数字、运算符或括号。我们可以使用 C++ 的字符串处理函数来拆分字符串并将其转换为标记序列。

然后,我们需要考虑运算符的优先级。在本例中,我们只需要考虑加减乘除四个基本运算符,因此可以使用一个简单的算法来解决。我们可以定义一个栈来存储操作符,并按照优先级将操作符入栈或出栈。这样可以确保先执行高优先级的运算。

最后,我们需要计算表达式的值。可以使用逆波兰表达式(Reverse Polish Notation,RPN)来实现。逆波兰表达式是一种前缀表达式,其中每个操作符都放在其对应的操作数之前。我们可以使用一个栈来存储操作数和中间结果。遍历标记序列,遇到数字时将其压入栈中,遇到操作符时弹出栈顶的两个操作数,进行运算,并将结果压入栈中。

下面是 C++ 实现代码:


#include <iostream>

#include <string>

#include <stack>

#include <sstream>

using namespace std;

int priority(char op) {

  if (op == '+' || op == '-')

    return 1;

   else if (op == '*' || op == '/')

    return 2;

   else

    return 0;

  

}

double calculate(double a, double b, char op) {

  switch (op) {

    case '+': return a + b;

    case '-': return a - b;

    case '*': return a * b;

    case '/': return a / b;

    default: return 0;

  }

}

double evaluate(const string& expr) {

  stack<double> operands;

  stack<char> operators;

  istringstream iss(expr);

  string token;

  while (iss >> token) {

    if (isdigit(token[0])) {

      double operand = stod(token);

      operands.push(operand);

    } else {

      char op = token[0];

      while (!operators.empty() && priority(op) <= priority(operators.top())) {

        double b = operands.top(); operands.pop();

        double a = operands.top(); operands.pop();

        char op1 = operators.top(); operators.pop();

        double result = calculate(a, b, op1);

        operands.push(result);

      }

      operators.push(op);

    }

  }

  while (!operators.empty()) {

    double b = operands.top(); operands.pop();

    double a = operands.top(); operands.pop();

    char op = operators.top(); operators.pop();

    double result = calculate(a, b, op);

    operands.push(result);

  }

  return operands.top();

}

int main() {

  string expr;

  getline(cin, expr);

  double result = evaluate(expr);

  cout << result << endl;

  return 0;

}

上面的代码定义了两个栈:一个用于存储操作数和中间结果,另一个用于存储运算符。`priority` 函数用于判断运算符的优先级。`calculate` 函数用于计算两个操作数的结果。`evaluate` 函数遍历标记序列,并根据优先级进行运算,返回最终结果。`main` 函数读取用户输入的表达式,并输出计算结果。

使用上面的代码,我们可以计算简单的算数表达式。例如,输入 `3 + 4 * (2 - 1)`,输出 `7`。这个实现并不支持变量赋值、函数调用等高级功能,但对于一些简单的计算任务已经足够了。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复