21xrx.com
2025-06-28 00:45:36 Saturday
登录
文章检索 我的文章 写文章
C++字符串表达式计算
2023-07-06 05:32:55 深夜i     35     0
C++ 字符串 表达式 计算

C++是一门强大的编程语言,它具有广泛的应用领域,在编程中,字符串表达式的计算是常见的需求之一。本文将介绍如何使用C++计算字符串表达式。

首先,我们需要了解什么是字符串表达式。字符串表达式是由数字、运算符和括号等符号组成的文本字符串,例如“3 + 4 * 2 / (1 - 5)”。这个表达式中包含四个数字,三个运算符和两个括号。

在C++中,我们可以使用字符串类型(string)来存储字符串表达式,然后使用各种算法来计算它们。下面是一个简单的实现示例:

#include <string>
#include <stack>
#include <sstream>
#include <iostream>
using namespace std;
int calculate(string s) {
  stack<int> nums; // 用于存储数字的栈
  stack<char> ops; // 用于存储运算符的栈
  stringstream ss(s); // 用于将字符串转换为数字的字符串流
  char op = '+'; // 初始化运算符为加号
  int num;
  while(ss >> num || !ops.empty()) {
    if(ss.fail()) {
      ss.clear();
    }
    switch(op) {
      case '+':
        nums.push(num);
        break;
      case '-':
        nums.push(-num);
        break;
      case '*':
        nums.top() *= num;
        break;
      case '/':
        nums.top() /= num;
        break;
    }
    op = ss.peek();
    if(op == '+' || op == '-') { // 遇到加号或减号,直接将运算符入栈
      ops.push(op);
      ss.ignore();
    } else if(op == '*' || op == '/') { // 遇到乘号或除号,先取下一个数字,再计算
      ss.ignore();
      ss >> num;
      op == '*' ? nums.top() *= num : nums.top() /= num;
    } else if(op == ')' && !ops.empty()) { // 遇到右括号,弹出运算符并计算结果
      ops.pop();
      num = nums.top();
      nums.pop();
      while(!ops.empty() && ops.top() != '(') {
        char top_op = ops.top();
        ops.pop();
        top_op == '+' ? num += nums.top() : num -= nums.top();
        nums.pop();
      }
      nums.push(num);
      ss.ignore();
    } else {
      ss.ignore();
    }
  }
  return nums.top();
}
int main() {
  string s = "3 + 4 * 2 / (1 - 5)";
  cout << calculate(s) << endl;
  return 0;
}

在上面的代码中,我们定义了两个栈,一个用于存储数字,一个用于存储运算符。我们还定义了一个字符串流,用于将字符串转换为数字。然后我们遍历字符串表达式,根据不同的运算符进行计算,并将运算结果入栈。如果遇到乘除号,则先取下一个数字进行运算,遇到右括号则弹出运算符并计算结果。

最后,我们返回数字栈中的顶部元素,即为所求的结果。在本例中,使用该函数来计算"3 + 4 * 2 / (1 - 5)"这个字符串表达式的结果为“1”。

总之,使用C++计算字符串表达式可能需要一些算法知识和代码实现技巧。本文提供了一个简单的实现示例,希望对读者有所帮助。对于更复杂的表达式,需要使用更高级的算法和数据结构来实现。

  
  

评论区