中缀表达式转后缀表达式的问题
int isNum( char c)//判断是否为数字{
int ret = 0;
if('0'<= c && c<= '9')
{
ret = 1;
}
else
{
ret = 0;
}
return ret;
}
int isOperator( char c)//判断是否为运算符
{
int ret = 0;
switch(c)
{
case '+':
case '-':
case '*':
case '/':
ret = 1;
break;
default:
ret = 0;
break;
}
return ret;
}
void output( char c)//输出
{
if('\0'!= c)
{
printf("%c",c);
}
}
int priority( char c)//判断符号的优先级 +、-返回1 *、/返回2
{
int ret = 0;
if('+' == c || '-' == c)
{
ret = 1;
}
else if('*' == c || '/' == c)
{
ret = 2;
}
return ret;
}
int isLeft( char c)//判断是否为左括号
{
int ret = 0;
if('(' == c)
{
ret = 1;
}
return ret;
}
int isRight( char c)//判断是否为右括号
{
int ret = 0;
if(')' == c)
{
ret = 1;
}
return ret;
}
void transform( char * c)//中缀转后缀
{
LinkStack* stack = LinkStack_Create();//用于存放运算符的栈
int i = 0;//
while(c[i] != '\0')
{
if( isNum(c[i]) )//如果是数字直接输出
{
output(c[i]);
}
else if(isOperator(c[i]))//如果是运算符
{
if(LinkStack_Size(stack) == 0)//第一次遇见运算符压盏
{
LinkStack_Push(stack,(void*)(c+i));
}else
{
while( priority( (*(char*)LinkStack_Top(stack) ) ) >= priority(c[i]))//如果栈顶运算符优先级大于或等于当前运算符出栈并且输出
{
if(LinkStack_Size(stack) != 0)
{
output( *(char*)LinkStack_Pop(stack) );
}
}
LinkStack_Push(stack,(void*)(c+i));//栈为空或者栈里优先级都小于当前运算符,压盏
}
}else if(isLeft(c[i]))//如果是左括号 压栈
{
LinkStack_Push(stack,(void*)(c+i));
}else if(isRight(c[i]))//如果是右括号,在栈顶不为左括号时,弹出全部运算符
{
while( !isLeft( ( *(char*)LinkStack_Top(stack)) ) )
{
printf("%c", *(char*)LinkStack_Pop(stack));
}
LinkStack_Pop(stack);//弹出左括号
}
i++;
}
if(c[i] == '\0')//遍历完整个字符串时,栈中符号全部出栈
{
while(LinkStack_Size(stack))
{
output( *(char*)LinkStack_Pop(stack));
}
}
LinkStack_Destroy(stack);
}
int main(int argc, char *argv[]) {
char c[] = "3+2(4-5*6)+7/8";
transform(c);
栈是看教程跟着写的,现在遇见的问题是 priority( (*(char*)LinkStack_Top(stack) ) ) >= priority(c[i] ) 判断优先级这里如果加上=号就会运行时错误,不加没问题。请问各位大牛,问题到底出在哪? 我看的教程上面是把char转换成指针类型储存的,我改了,也不会出错,也就是这个样子LinkStack_Push(stack,(void*)(int)c[i],难道只能这么存么?存数组的地址进去就不行吗?菜鸟求助