400-615-3026 扫描微信
专注于抖音,小红书,微信视频号平台直播,运营的培训,陪跑,IP孵化,运营,直播和落地执行!  咨询专线: 400-615-3026

throw 和 throws 关键字有什么区别?

发布时间:2024-08-29

这是我之前做的,在tc上是可以的,因为atoi()(将字符转为数值)是tc的库函数,在c++6.0上会报错。其实很简单,自己写一个也可以。第一次运行的时候没有提示,所以忘了直接输入表达式回车就行了。基本思路就是利用栈把中缀表达式转为后缀表达式,然后求值。

#包括

#定义最大100

typedef long 数据类型;

类型定义 char chartype;

typedef 结构

数据类型数据[max];

int 顶部;

}numstack;/*对象栈用于存储操作对象*/

typedef 结构

chartype数据[max];

int top,y[max];/*y存储相应运算符的优先级*/

}stack;/*操作符栈用于存储操作符*/

int fenli(numstack *S,字符串[max],int i)

/* 从表达式中取出操作数,将其转换为值并存储在对象堆栈中*/

intj=0;

char st[100];/*st用于临时存储字符类型操作数*/

st[j]=字符串[i];i++;j++;

}while(string[i]>='0'&&string[i]top++;

S->data[S->top]=atoi(st);/*atoi用于将字符串转换成对应的值,并将转换后的值存放到对象堆栈中*/

j=0;

return(i);/*返回当前字符位置*/

int pipei(字符串[max])

/*验证括号是否匹配*/

堆栈*S;

int i=0;

S->top=0;/*初始化操作符堆栈*/

while(string[i]!='\0')

if(string[i]=='(')/*遇到'('时,将'('压入堆栈*/

S->顶部++;

S->数据[S->顶部]=字符串[i];

if(string[i]==')')/*遇到')'时检查栈顶是否为'(',是则弹出栈顶,否则如果括号不匹配则返回0*/

如果(S->数据[S->顶部]=='(')

S->顶部--;

否则返回(0);

我++;

if(S->top>0) return(0);/*判断操作符栈是否为空,如果不为空,则括号不匹配,返回0,如果为空,则括号匹配,返回1*/

否则返回(1);

void yunsuan(char 字符串[max])

数字堆栈*S;

int i=0;

S->top=0;/*初始化对象堆栈*/

while(string[i]!='\0')/*如果是结束字符,则结束循环*/

如果(string[i]>='0'&&string[i]data[S->top]);

int zhuanghuan(char s[max],char string[max])

/*将中缀表达式转换为后缀表达式*/

堆栈*S;

int i=0,j=0;

S->顶部=-1;

S->y[0]=0;/*初始化操作符堆栈*/

while(s[i]!='\0')/*遇到终止符则结束循环*/

如果(s[i]>='0'&&s[i]top++;

S->数据[S->顶部]='(';

S->y[S->top]=0;/*'('括号内优先级最低,括号外优先级最高*/

休息;

case ')':/*遇到')'时,从运算符栈中弹出运算符,直到遇到'(',则直接弹出'('*/

while(S->数据[S->顶部]!='(')

字符串[j]=S->数据[S->top];

S->顶部--;j++;

S->顶部——;​​中断;

案例‘+’:

案件 '-':{

string[j]=' ';/*将操作对象以间隔分隔*/

if(S->y[S->top]>=1)/*如果栈顶元素的优先级大于+-1的优先级,则弹出栈顶元素*/

字符串[j]=S->数据[S->顶部];

S->顶部--;

S->顶部++;

S->data[S->top]=s[i];/*将当前操作符+或-压入堆栈*/

S->y[S->top]=1;/*+-的优先级定义为1*/

j++;打破;

案件 '*':

案件 '/':

字符串[j]=' ';

if(S->y[S->top]>=2)/*如果栈顶元素的优先级大于或等于*或/的优先级,则从栈中弹出栈顶元素*/

字符串[j]=S->数据[S->顶部];

S->顶部--;

S->顶部++;

S->data[S->top]=s[i];/*将当前操作符*或/压入堆栈*/

S->y[S->top]=2;/*优先级定义为2*/

j++;打破;

我++;

while(S->top!=-1)/*如果栈不为空,则弹出,直到栈为空*/

字符串[j]=S->数据[S->top];S->top--;j++;

字符串[j]='\0';

printf("后缀表达式为:%s\n",string);

返回(1);

int 主要()

char 字符串[max],s[max],flag='1';

while(标志!='0')

打印(“”);

得到;

如果(管道)

如果(zhuanghuan(s,string))

yunsuan(字符串);

else printf("布皮佩");

printf("输入0结束,输入任意字符继续");

scanf("%c",&flag);

北京市朝阳区公安局公备案号-110105001113 工业和信息化部京ICP备案号 京ICP备2023035641号-1