目前正在学习数据结构,根据书本上的思路自己捣鼓了一个表达式计算的小程序,目前支持负数、小数运算和报错。
下面贴上代码,代码写的很烂(耦合度比较高,比较繁琐),大家如果有什么更好的建议可以提一下!
PS:第一次写博客,诚惶诚恐
#include <stack>
#include <iostream>
#include <string> //cin>>string
#include <cstring> //strcpy_s()
#include <math.h> //pow()
using namespace std;
char ops[] = { '+','-','/','*','(',')','#','.','0','1','2','3','4' ,'5','6','7','8','9' };//符号集
int icp[] = { 2,2,4,4,7,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 };//进栈优先级
int isp[] = { 3,3,5,5,1,7,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 };//栈内优先级
class Calculator {
public:
Calculator();
~Calculator();
void Run();
private:
char* cOrin;//中缀表达式数组
char** cResu;//后缀表达式
void Initialize();//初始化
bool ErrCheck(string expr);//检错
int icpF(char c);//栈外优先级搜索
int ispF(char c);//栈内优先级搜索
void InToPost();//中缀转后缀
double getOperand(int pos);//获取数字
double doOperation(char Operator, double op1, double op2);//计算
};
Calculator::Calculator() {
cOrin = NULL;
cResu = NULL;
}
Calculator::~Calculator() {
delete[] cOrin;
int size = sizeof(*this->cResu) / sizeof(char*);
for (int i = 0; i < size; i++) {
delete[] this->cResu[i];
}
delete[] this->cResu;
}
void Calculator::Initialize() {
string cinOrder = "";//中缀表达式
int size = 0;//表达式长度
while (true) {
cout << "请输入表达式:";
cin >> cinOrder;
size = cinOrder.size();
if (this->ErrCheck(cinOrder) == true) {
goto loop;
}
else {
break;