holyya.com
2025-09-04 13:39:03 Thursday
登录
文章检索 我的文章 写文章
C++如何实现计算器功能
2023-06-30 02:40:33 深夜i     --     --
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++的优势在于它的高效性和强大的库支持,可以让我们轻松地开发出各种不同类型的应用程序,包括计算器。

  
  

评论区

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