_NO_ONE_ 2017-10-28 05:25 采纳率: 0%
浏览 696

中缀转后缀表达式(c语言描述)我这代码不知道哪儿错了 求大神指教啊!

#include
#include
#define Maxsize 50
#define Maxop 7

typedef struct
{
char data[Maxsize];
int top;
}OpStack;

int JudgeWordorSymbol(char exp)
{
if (exp == '(' || exp == ')' || exp == '+' || exp == '-' || exp == '*' || exp == '/')
return 1;
else
return 0;
}

struct
{
char symbol;
int pre;
}Leftopertor[] = { { '=',0 },{ '(',1 },{ ')',6 },{ '+',3 },{ '-',3 },{ '*',5 },{ '/',5 } },
Rightopertor[] = { { '=',0, },{ '(',6 },{ ')',1 },{ '+',2 },{ '-',2 },{ '*',4 },{ '/',4 } };

int Leftpri(char op)
{
int i;
for (i = 0; i < Maxop; i++)
{
if (Leftopertor[i].symbol == op)
return Leftopertor[i].pre;
}
}

int Rightpri(char exp)
{
int i;
for (i = 0; i < Maxop; i++)
{
if (Rightopertor[i].symbol == exp)
return Rightopertor[i].pre;
}

}

int Precede(char op, char exp)//判断栈内和栈外的优先级 不是所有控件路径都返回值:if else 语句没有涵盖所有情况
{
if (Leftpri(op) == Rightpri(exp))
return 0;
else if (Leftpri(op) < Rightpri(exp))
return -1;
else
return 1;
}

void InfixTransforPostfix(char *exp, char postexp[])
{
int i = 0;
OpStack *op = (OpStack *)malloc(sizeof(OpStack));
op->top = -1;
op->top++;
op->data[op->top] = '=';
while (*exp != '\0')
{
if (!JudgeWordorSymbol(*exp))//是数字
{
while (*exp >= '0'&&*exp <= '9')
{
postexp[i++] = *exp;
exp++;
}
postexp[i++] = '#';
}
else//是符号
{
switch (Precede(op->data[op->top], *exp))
{
case 1://exp不能进行循环 !exp++
postexp[i++] = op->data[op->top];
op->top--;
break;
case -1:
op->top++;
op->data[op->top] = *exp;
exp++;
break;
case 0:
exp++;
op->top--;
break;
}
}
i++;
}
while (op->data[op->top] != '=')
{
postexp[i++] = op->data[op->top];
op->top--;
}
postexp[i] = '\0';
}

void main()
{
char exp[] = "(24-16)/(15+5)";
char postexp[Maxsize];
InfixTransforPostfix(exp, postexp);
printf("%s\n", postexp);
getchar();
}

图片说明

  • 写回答

2条回答

  • threenewbee 2017-10-28 07:52
    关注

    这是警告,如果要避免这些警告,需要检查你的函数,给所有的路径结束都包含返回值。比如
    int foo()
    {
    if (xxxx)
    return xxx;
    }
    这么写就不是所有路径都是返回值,要避免警告,那么加上else return xxx;

    评论

报告相同问题?

悬赏问题

  • ¥30 虚心请教几个问题,各位DS,小生先有礼了
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题