微盘c语言删除多余括号,删除多余括号(源代码).doc

删除多余括号(源代码)

//删除多余括号

#include

#include

#define maxsize 100

typedef struct

{

char data[maxsize];//记录栈中数据

int top;//记录栈顶位置

}Stack;

Stack *InitStack()//初始栈函数

{

Stack *S;

S=(Stack *)malloc(sizeof(Stack));

S->top=-1;

return S;

}

int EmptyStack(Stack *S)//判栈空函数

{

if(S->top<=-1)

return 1;

else

return 0;

}

int FullStack(Stack *S)//判栈满函数

{

if(S->top>=maxsize)

return 1;

else

return 0;

}

Stack *Pop(Stack *S)//元素出栈函数

{

if(!EmptyStack(S))

{

S->top--;

}

return S;

}

Stack *Push(Stack *S,char Data)//元素入栈函数

{

if(!FullStack(S))

{

S->top++;

S->data[S->top]=Data;

}

return S;

}

void PrintStack(Stack *S)//遍历栈函数

{

if(EmptyStack(S))

{

printf("此栈为空,无法输出!");

}

else

{

while(S->top>-1)

{

S=Pop(S);

printf("%c",S->data[S->top+1]);

}

}

}

void main()

{

Stack *S1,*S2;

char s[100],c;

int i=-1,j,k,m,n;

S1=InitStack();

S2=InitStack();

printf("请输入一个四则运算表达式:\n");

scanf("%c",&c);

while(c!='#')//输入一个四则运算表达式

{

i++;

s[i]=c;

scanf("%c",&c);

}

for(j=0;j<=i;j++)

{

if(s[j]=='(')//考虑左括号

{

if(s[j+2]==')')//若括号里只有一个字符,删除括号

{

j++;

S1=Push(S1,s[j]);

j++;

}

else if(s[j+3]==')')

{

if(s[j+1]=='-')//若与左括号相邻的是负号

{

for(k=0;k<4;k++)

{

S1=Push(S1,s[j]);

j++;

}

}

else

{

for(k=0;k<2;k++)

{

j++;

S1=Push(S1,s[j]);

}

j++;

}

}

else if(j-1==-1)//若第一个字符是左括号

{

S1=Push(S1,s[j]);

}

else if(j-1>=0)//若第一个字符不是左括号

{

if(s[j-1]=='/')

{

S1=Push(S1,s[j]);

}

else if((s[j-1]=='*'||s[j-1]=='-')&&(s[j+2]=='+'||s[j+2]=='-')||s[j+1]=='-')

{

for(;s[j]!=')';j++)

{

S1=Push(S1,s[j]);

}

S1=Push(S1,s[j]);

}

else

{

for(;s[j]!=')';j++)

{

S1=Push(S1,s[j]);

}

j--;

}

}

}

else if(s[j]==')')//考虑右括号

{

if(j==i)

{

S1=Push(S1,s[j]);

}

else if((s[j-2]=='+'||s[j-2]=='-')&&(s[j+1]=='*'||s[j+1]=='/'))

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值