📄 tran.h
字号:
#include<stdlib.h>
void count(double*num,int&top,char sym)
{
double tem;
if(top<=1)
cout<<"输入错误!!!"<<endl;
else
{
tem=num[top];
top--;
switch(sym)
{
case '+':num[top]+=tem;break;
case '-':num[top]-=tem;break;
case '*':num[top]*=tem;break;
case '/':num[top]/=tem;break;
default:cout<<"error!!!"<<endl;
}
}
}
bool findnum(char*&exp,double*num,int&top,bool first)
{
char tra;
char str[20];
char *p=str;
bool find=false;
tra=*exp;
if(tra=='-'&&(*(exp-1)=='('||first))
{
*p++=tra;
exp++;
}
while(true)
{
tra=*exp;
if(tra>='0'&&tra<='9'||tra=='.')
{
*p++=tra;
exp++;
if(!find)
find=true;
}
else
{
if(find)
{
*p='\0';
top++;
num[top]=atof(str);
}
break;
}
}
if(find)
return true;
else
return false;
}
double translate(char *exp)
{
char TRACK[20];
int top=0;
double *num;
int head=0;
char tra;
bool first=true;
bool key=true;
bool space=false;
num=new double[20];
TRACK[top]='#';
num[head]=0.0;
while(key)
{
if(findnum(exp,num,head,first))
{
if(space)
cout<<",";
cout<<num[head];
space=true;
}
tra=*exp++;
if(first)
first=false;
switch(tra)
{
case '#':while(top>0)
{
cout<<TRACK[top];
count(num,head,TRACK[top]);
top--;
}
cout<<"#";
key=false;break;
case ')':while(TRACK[top]!='(')
{
cout<<TRACK[top];
count(num,head,TRACK[top]);
top--;
space=false;
}
top--;break;
default:while(track_pre(TRACK[top])>=sign_pre(tra,key))
{
cout<<TRACK[top];
count(num,head,TRACK[top]);
top--;
space=false;
}
top++;
TRACK[top]=tra;break;
}
}
if(head!=1)
cout<<"error!!!"<<endl;
return num[head];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -