C++模板写计算器 带()
来源:互联网 发布:大数据分析平台架构 编辑:程序博客网 时间:2024/05/17 16:54
#include "stack.h"#include <iostream>using namespace std;int main(){Stack<int> number_;Stack<char> operator_;char src[100];cout << "请输入表达式" << endl;cin >> src;int i = 0;while (1){if (src[i] == '\0'){int num1;int num2;while (operator_.Empty() == false){num1 = number_.getTop();number_.Pop();num2 = number_.getTop();number_.Pop();int result = cal(num2, num1, operator_.getTop());operator_.Pop();number_.Push(result);//i不增加}break;}switch (src[i]){case '(':{operator_.Push(src[i]);i++;break;}case ')':{int num1;int num2;int num3;int result;int result_n;if (compare(operator_.getTop()) == 3){num1 = number_.getTop();number_.Pop();num2 = number_.getTop();number_.Pop();result = cal(num2, num1, operator_.getTop());operator_.Pop();if (operator_.getTop() == '('){number_.Push(result);i++;operator_.Pop();break;}else{num3 = number_.getTop();number_.Pop();result_n = cal(num3, result, operator_.getTop());number_.Push(result_n);operator_.Pop();operator_.Pop();i++;break;}}else{num1 = number_.getTop();number_.Pop();num2 = number_.getTop();number_.Pop();result = cal(num2, num1, operator_.getTop());operator_.Pop();number_.Push(result);i++;operator_.Pop();break;}} case '-':case '+':{if (operator_.Empty() == true){operator_.Push(src[i]);i++;break;}if (compare(src[i]) <= compare(operator_.getTop())){int num1;int num2;num1 = number_.getTop();number_.Pop();num2 = number_.getTop();number_.Pop();int result = cal(num2, num1, operator_.getTop());operator_.Pop();operator_.Push(src[i]);i++;number_.Push(result);}else{operator_.Push(src[i]);i++;}break;}case '*':{operator_.Push(src[i]); i++;break;}case '/':{operator_.Push(src[i]);i++;break;}default: {int num = 0;while (src[i] >= '0' && src[i] <= '9'){num = num * 10 + my_atoi(src[i]);i++;}number_.Push(num);break;}}}cout << number_.getTop() << endl;}上文为stack.cpp这一部分写的不是很好,应该把主要计算的main里面的计算过程写成函数调用。
#ifndef _STACK_H_#define _STACK_H_template<typename T>class Stack{private:T * s_;int top_;public:Stack();~Stack();void Push(const T& n);void Pop();T& getTop()const;bool Empty()const;};template<typename T>Stack<T>::Stack() :top_(-1){s_ = new T[100];}template<typename T>Stack<T>::~Stack(){delete[]s_;}template<typename T>void Stack<T>::Push(const T & n){if (top_ == 99){throw(1);}top_++;s_[top_] = n;}template<typename T>void Stack<T>::Pop(){if (Empty() == true){throw(1);}top_--;}template<typename T>T & Stack<T>::getTop()const{if (Empty() == true){throw(1);}return s_[top_];}template<typename T>bool Stack<T>::Empty()const{return top_ + 1 == 0;}int compare(char c){if (c == '*' || c == '/'){return 3;}else if (c == '+' || c == '-'){return 2;}else if (c == '('){return 1;}else if (c == '\0'){return 0;}else{return 0;}}int cal(int n, int m, char c){if (c == '+')return n + m;if (c == '-')return n - m;if (c == '*')return n*m;if (c == '/')return n / m;}int my_atoi(char ch){if (ch >= '0' && ch <= '9'){return ch - '0';}}#endif
这个写的是一个自己的stack模板类。
在vs2015环境下能够编译成功,亲测有效
0 0
- C++模板写计算器 带()
- 用C写的简易计算器
- C写的简单文本计算器
- C语言写的简易计算器
- 用C语言写一个的计算器
- 纯C语言写计算器界面
- c写的一个简单的计算器
- C语言写的一个简易计算器
- C语言新手写的计算器
- 写了一个简单的小计算器,带历史记录
- C语言写的仿WINDOWS 界面计算器源码
- c#,用面向对象思想写一个计算器
- 【C】使用位运算符写一个整数计算器(图解)
- C语言写的一个简单的计算器
- 学c语言第一个自己写的计算器程序
- 学习C++模板---模板类带简单参数
- 大神写的高精度模板 C/C++
- 自带计算器
- C# VS2013生成的exe文件修改图标
- 先验概率,后验概率,似然概率,条件概率,贝叶斯,最大似然
- python服务器环境搭建(1)——本地服务器准备
- 设计模式-静态代理模式
- 欢迎使用CSDN-markdown编辑器
- C++模板写计算器 带()
- win10 uwp 关联文件
- LeetCode 222. Count Complete Tree Nodes 题解——Java
- AndroidStudio多个Module时dependencies的管理
- windows 根据ip查到计算机名
- 欢迎使用CSDN-markdown编辑器
- C++实现字符串分割函数 split
- 百度地图高度自适应
- Windows 7 系统的旧版IE浏览器升级到IE11