21xrx.com
2024-12-22 22:04:51 Sunday
登录
文章检索 我的文章 写文章
C++字符串表达式计算
2023-07-06 05:32:55 深夜i     --     --
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++计算字符串表达式可能需要一些算法知识和代码实现技巧。本文提供了一个简单的实现示例,希望对读者有所帮助。对于更复杂的表达式,需要使用更高级的算法和数据结构来实现。

  
  

评论区

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