21xrx.com
2025-03-29 15:30:50 Saturday
文章检索 我的文章 写文章
C++计算表达式的值并输出
2023-07-07 18:49:18 深夜i     6     0
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++计算表达式并输出结果。

  
  

评论区