📄 changeexpression.h
字号:
#ifndef CHANGEEXPRESSION_H_
#define CHANGEEXPRESSION_H_
/*
把原栈 stackList1 转换成栈 stackList2
*/
void changeStack(stackList<char> & stackList1 ,stackList<float> & stackList2)
{
//一个进行数字处理时用的中介栈
stackList<char> number ;
stackList<char> number1 ;
float count=0 ,i ,agency,count1 = 0 ,length;
char c ;
while( stackList1.getLength() != 0)
{
//如果是 非 . 符号 则直接把它放进栈stackList2
if((stackList1.getType() == 1) && (stackList1.getTop() != '.'))
{
stackList2.push(stackList1.getTop());
stackList1.pop();
stackList2.setType(1) ;
}
else
{ /*
*如果是数字则把它提出并保存到栈number 当提取结束进行运算回复原来的数
* 例子 :3 2 + 5 =
* 当恢复 32 时 需要先把 2 取出 然后进栈 number 然后把3取出进栈number
* 然后根据栈number 的长用 for 循环进行运算
*/
while(stackList1.getType() != 1)
{
c = stackList1.getTop() ;
number.push(c);
number.setType(0);
stackList1.pop();
if(stackList1.getLength() == 0)
break;
}
//如果是小数在 . 分开进行两次运算
//计算小数部分
if((stackList1.getType() == 1)&&(stackList1.getTop() == '.'))
{
length = number.getLength() ;
for(i = 1 ; i<= length; i++ )//求数值
{
agency = number.getTop() ;
agency = agency - 48 ;
count += agency*pow(10.0 ,i/(-1)) ;
number.pop() ;
}
//把 . 符号去除
stackList1.pop() ;
//计算小数部分
while(stackList1.getType() != 1)
{
c = stackList1.getTop() ;
number1.push(c);
number1.setType(0);
stackList1.pop();
if(stackList1.getLength() == 0)
break;
}
for(i = number1.getLength() ; i>0 ; i-- )//求数值
{
agency = number1.getTop() ;
agency = agency - 48 ;
count1 += agency*pow(10.0 ,i-1) ;
number1.pop() ;
}
count += count1 ;
}
//如果不是小数进行一次运算 根据栈长计算
else
{
for(i = number.getLength() ; i>0 ; i-- )//求数值
{
agency = number.getTop() ;
agency = agency - 48 ;
count += agency*pow(10.0 ,i-1) ;
number.pop() ;
}
}
stackList2.push(count);
stackList2.setType(0) ;
count = 0 ;
count1 = 0 ;
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -