21xrx.com
2024-12-22 20:57:40 Sunday
登录
文章检索 我的文章 写文章
C++计算表达式的值并输出
2023-07-07 18:49:18 深夜i     --     --
C++ 计算表达式 输出

C++是一种高级编程语言,它非常适合计算表达式的值并输出结果。本文将介绍如何使用C++计算表达式并输出结果。

首先,表达式需要被解析并转换为计算机可以理解的格式。在C++中,可以使用字符串来表示表达式,并将其转换为逆波兰表达式。

逆波兰表达式是一种不需要使用括号的表达式格式,它可以被计算机轻松解析和计算。将表达式转换为逆波兰表达式可以使用栈来实现。具体来说,可以将运算符按照优先级入栈,并在每次扫描到数字时输出栈中已有的运算符,直到扫描完整个表达式。

一旦表达式被转换为逆波兰表达式,就可以使用栈来计算表达式的值。具体来说,可以扫描逆波兰表达式中的每个数和运算符,将数入栈并对栈中的数进行运算,直到遍历完整个表达式。

最后,将计算结果输出即可。C++中可以使用标准输出流来方便地输出结果。

下面是使用C++计算表达式并输出结果的示例代码:


#include <iostream>

#include <stack>

#include <string>

#include <vector>

using namespace std;

int calculate(string s) {

  stack<int> nums;

  stack<char> ops;

  vector<char> opPres = {'+', '-', '*', '/'};

  vector<int> pres = 1;

  for (int i = 0; i < s.size(); i++) {

    char curr = s[i];

    if (isdigit(curr)) {

      int num = curr - '0';

      while (i + 1 < s.size() && isdigit(s[i + 1])) {

        num = num * 10 + (s[i + 1] - '0');

        i++;

      }

      nums.push(num);

    } else if (find(opPres.begin(), opPres.end(), curr) != opPres.end()) {

      while (!ops.empty() && pres[find(opPres.begin(), opPres.end(), ops.top()) - opPres.begin()] >= pres[find(opPres.begin(), opPres.end(), curr) - opPres.begin()]) {

        int num2 = nums.top();

        nums.pop();

        int num1 = nums.top();

        nums.pop();

        char op = ops.top();

        ops.pop();

        int res;

        switch (op) {

          case '+':

            res = num1 + num2;

            break;

          case '-':

            res = num1 - num2;

            break;

          case '*':

            res = num1 * num2;

            break;

          case '/':

            res = num1 / num2;

            break;

          default:

            break;

        }

        nums.push(res);

      }

      ops.push(curr);

    }

  }

  while (!ops.empty()) {

    int num2 = nums.top();

    nums.pop();

    int num1 = nums.top();

    nums.pop();

    char op = ops.top();

    ops.pop();

    int res;

    switch (op) {

      case '+':

        res = num1 + num2;

        break;

      case '-':

        res = num1 - num2;

        break;

      case '*':

        res = num1 * num2;

        break;

      case '/':

        res = num1 / num2;

        break;

      default:

        break;

    }

    nums.push(res);

  }

  return nums.top();

}

int main() {

  string expression = "3+2*4-1";

  int result = calculate(expression);

  cout << "The result of " << expression << " is " << result << endl;

  return 0;

}

在上面的代码中,我们定义了一个`calculate`函数,它接收一个表达式字符串,并返回其计算结果。在函数内部,我们使用了两个栈,一个用于存储数字,另一个用于存储运算符。我们还定义了`opPres`和`pres`两个数组,用于表示不同运算符的优先级。

在函数的主体中,我们使用一个循环逐一扫描表达式中的每个字符。如果当前字符是数字,则转换为整数并入栈。如果当前字符是运算符,则使用两个栈来计算其优先级,并根据优先级来弹出数字和运算符进行计算,并将结果压入数字栈中。

最后,我们在`main`函数中调用`calculate`函数,对表达式进行计算,并使用C++标准输出流输出计算结果。

使用C++计算表达式并输出结果非常简单,只需要使用栈来解析和计算表达式即可。希望这篇文章能够帮助你使用C++计算表达式并输出结果。

  
  

评论区

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