21xrx.com
2025-03-28 16:21:29 Friday
文章检索 我的文章 写文章
C++如何实现计算器功能
2023-06-30 02:40:33 深夜i     8     0
C++ 计算器 实现 功能 操作符

计算器是一种在日常生活中常用的工具,可以用来计算数学表达式的值。在编程领域中,C++是一种广泛应用的语言,并且可以用来实现计算器功能。

C++中实现计算器的方法有很多种,其中一种比较常见的方法是使用表达式求值算法。该算法可以将一个数学表达式转换为一个后缀表达式,然后通过栈的数据结构计算出表达式的值。

下面是一个简单的示例,演示如何使用C++实现计算器功能:

#include <iostream>
#include <stack>
#include <string>
using namespace std;
int precedence(char op)
{
  if(op == '+' || op == '-')
    return 1;
  if(op == '*' || op == '/')
    return 2;
  return 0;
}
double applyOperation(char op, double b, double a)
{
  switch(op)
  {
    case '+': return a + b;
    case '-': return a - b;
    case '*': return a * b;
    case '/': return a / b;
  }
  return 0;
}
double evaluate(string expression)
{
  stack<double> values;
  stack<char> operators;
  for(int i = 0; i < expression.length(); i++)
  {
    if(expression[i] == ' ')
      continue;
    else if(expression[i] == '(')
      operators.push(expression[i]);
    else if(isdigit(expression[i]))
    {
      double value = 0;
      while(i < expression.length() && isdigit(expression[i]))
      {
        value = (value * 10) + (expression[i] - '0');
        i++;
      }
      values.push(value);
      i--;
    }
    else if(expression[i] == ')')
    {
      while(!operators.empty() && operators.top() != '(')
      {
        double val2 = values.top();
        values.pop();
        double val1 = values.top();
        values.pop();
        char op = operators.top();
        operators.pop();
        values.push(applyOperation(op, val2, val1));
      }
      if(!operators.empty())
        operators.pop();
    }
    else
    {
      while(!operators.empty() && precedence(operators.top()) >= precedence(expression[i]))
      {
        double val2 = values.top();
        values.pop();
        double val1 = values.top();
        values.pop();
        char op = operators.top();
        operators.pop();
        values.push(applyOperation(op, val2, val1));
      }
      operators.push(expression[i]);
    }
  }
  while(!operators.empty())
  {
    double val2 = values.top();
    values.pop();
    double val1 = values.top();
    values.pop();
    char op = operators.top();
    operators.pop();
    values.push(applyOperation(op, val2, val1));
  }
  return values.top();
}
int main()
{
  string expression = "5 + 4 * 3 - 2 / 1";
  double result = evaluate(expression);
  cout << "The result of expression is : " << result << endl;
  return 0;
}

该示例代码中,我们首先定义了两个函数--`precedence`和`applyOperation`。前者主要是定义运算符的优先级,后者则是用来计算进行运算操作的结果。然后,使用一个栈来保存数值和运算符,对于输入的表达式逐字符进行处理,在加入栈或计算时,遵循一定的优先级规则,直到计算出最终结果。

通过以上示例代码,我们可以看到,用C++实现计算器功能并不难实现。C++的优势在于它的高效性和强大的库支持,可以让我们轻松地开发出各种不同类型的应用程序,包括计算器。

  
  

评论区