{ }
double newDigit(double prior_digit, double now_digit, bool isHavePoint, double point_num) { }
double value; if(!isHavePoint) { } else { }
return value;
value = prior_digit + now_digit/(pow(10,point_num)); value = prior_digit*10 + now_digit; double value;
value = (double)ch - 48; return value;
Function.h
#ifndef FUNCTION_HEADER #define FUNCTION_HEADER
//友好的用户界面 void calUserInfo();
//用于记录处于栈内的优先级 int isp(char& ch);
//用于记录栈外的优先级 int osp(char& ch);
//相当于value = x op y;如果cal成功,然后将value的值返回r,用r来保存
bool cal(char op, double x, double y, double& r);
//判断是否为字符 bool isDigit(char ch);
//判断是否为小数点 bool isPoint(char ch);
//判断是否为操作运算符 bool isOperator(char ch);
//将数字的字符状态转化成double状态 double turnDigit(char ch);
//如果几个数字或加一个小数点连在一起,这说明他们是同一个数字的不同位数,此函数将不同连在一起的数字 //组成新的数字
double newDigit(double prior_digit, double now_digit, bool isHavePoint, double point_num); #endif
Main.cpp
#include \#include \#include
char str[100] = \
AStack
AStack
//用于存放操作符
//用于记录当前字符
char prior_ch = '\\0'; //用于记录前一个字符 double now_dig = 0; //用于记录当前一个数字 double prior_dig = 0; //用于记录前一个数字 double value = 0; //用于存放计算后的值 bool point = false; //用于判断是否有小数点
int point_num = 1; //用于记录数字后面的小数点位数 char topValue; //用于记录opnd的top上的值 char option = 'Y'; //用于判断是否要继续运算 do{
prior_dig = 0; now_ch = '='; opnd.push(prior_dig); optr.push(now_ch); system(\calUserInfo();
cout << \请输入表达式(以等号结束):\cin >> str;
bool exitPoint = false; /*对每个字符的处理*/ for(int i = 0; i < strlen(str); i++) {
now_ch = str[i];
/*判断是不是数字以及相关操作*/ if (isDigit(now_ch)) {
now_dig = turnDigit(now_ch); if (isDigit(prior_ch)) {
//在opnd中提前放一个0
*/
}
}
opnd.pop(prior_dig); if(exitPoint) { } else
now_dig = newDigit(prior_dig, now_dig,point,point_num); point = true;
now_dig = newDigit(prior_dig, now_dig,point,point_num); point_num++;
if(isPoint(prior_ch)) { }
value = now_dig; opnd.push(now_dig); prior_ch = now_ch;
opnd.pop(prior_dig);
now_dig = newDigit(prior_dig, now_dig,point,point_num); exitPoint = true; point_num++;
/*判断是不是小数点以及相关操作*/ else if (isPoint(now_ch)) { }
/*判断是不是操作符以及相关操作*/ else if (isOperator(now_ch)) {
/*对用于数字操作的相关标记量进行清空,方便下一次数字操作point = true; prior_ch = now_ch;
point = false; point = 0; exitPoint = false; point_num = 1;
/*看optr中是否有操作符存在,若不存在,则只放一个操作符进/* 但不进行任何操作*/ if(optr.length() <= 1) { }
/*optr已有操作符存在的话,开始进行优先级的比较*/ else {
optr.pop(topValue);
/* 栈内优先级小于栈外优先级*/ if(isp(topValue) < osp(now_ch)) { }
/*栈内优先级大于栈外优先级*/ else if(isp(topValue) > osp(now_ch)) {
if(now_ch == ')' && topValue == '(') { }
break; optr.push(topValue); optr.push(now_ch); prior_ch = now_ch; optr.push(now_ch); prior_ch = now_ch;
去*/
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库编写一个简易计算器的源代码(2)在线全文阅读。
相关推荐: