user-0 提问: 利用栈将数学中的中缀表达式转换为后缀表达式并输出，求助求助求助！！！

回复:
user: user-0
content: 引用 1 楼 cfjtaishan 的回复:#include <iostream> #include <stdio.h> #include <string.h> #include <math.h>  using namespace std;  int Priority(char);    //将运算符的优先级转换为可比较大小的数字  int main(void) {     char infix[100], suffix[100];   //分别用于接收中缀表达式和后缀表达式     char stack[100] = { 0 };     int inlen = 0, suflen = 0;     cin >> infix;   //接收中缀表达式      puts(infix);     int pti = -1;   //创建一个空栈,stcak[pti]为栈顶      for (inlen = 0; infix[inlen]; inlen++)  //依次检查每一个元素     {         if (infix[inlen] >= 'A' && infix[inlen] <= 'Z') { //操作数A--Z             suffix[suflen++] = infix[inlen];         } else if (Priority(infix[inlen]) > 0) //运算符+ - * / ^(乘方)         {             while (pti >= 0 && stack[pti] != '(' && Priority(stack[pti]) > 0 && Priority(infix[inlen]) <= Priority(stack[pti]))       //栈不空且栈顶元素不为'('且满足优先级条件                 suffix[suflen++] = stack[pti--];             stack[++pti] = infix[inlen];      //栈为空的时候,当前运算符入栈         } else if (infix[inlen] == '(')  //为(             stack[++pti] = infix[inlen];          else if (infix[inlen] == ')')  //为）         {             while (pti >= 0 && stack[pti] != '(')                 suffix[suflen++] = stack[pti--];   //退栈并且输出出栈的运算符             if (stack[pti]>=0)                 pti--;             else                 cout << "Error\n";  //做一次退栈操作         } else  //其他字符             cout << "Error\n";      }     while (pti >= 0 && stack[pti] != '(')  //栈不空且栈顶元素不为'('时         suffix[suflen++] = stack[pti--];   //退栈并且输出出栈的运算符     suffix[suflen] = '\0';     if (pti >= 0)    //如果栈不空，报错         cout << "Error\n";      //测试     for (int i = 0; i <= suflen; i++)         cout << suffix[i];     //测试     cout<<endl;      return 0; } int Priority(char ch)  //将运算符的优先级转换为可比较大小的数字 {     if (ch == '+' || ch == '-')         return 1;     else if (ch == '*' || ch == '/')         return 2;     else if (ch == '^')         return 3;     else         return 0; } 问题是出在不细心。 对比一下这两个表达式的区别：  else if (Priority(infix[inlen]>0)) 和 else if (Priority(infix[inlen])>0) 的区别； 是这样的，是我粗心了，没想到这么一个小小的粗心竟然让我对自己的算法质疑了两天，谢谢前辈，谢谢！！

user: user-1
content: #include <iostream> #include <stdio.h> #include <string.h> #include <math.h>  using namespace std;  int Priority(char);    //将运算符的优先级转换为可比较大小的数字  int main(void) {     char infix[100], suffix[100];   //分别用于接收中缀表达式和后缀表达式     char stack[100] = { 0 };     int inlen = 0, suflen = 0;     cin >> infix;   //接收中缀表达式      puts(infix);     int pti = -1;   //创建一个空栈,stcak[pti]为栈顶      for (inlen = 0; infix[inlen]; inlen++)  //依次检查每一个元素     {         if (infix[inlen] >= 'A' && infix[inlen] <= 'Z') { //操作数A--Z             suffix[suflen++] = infix[inlen];         } else if (Priority(infix[inlen]) > 0) //运算符+ - * / ^(乘方)         {             while (pti >= 0 && stack[pti] != '(' && Priority(stack[pti]) > 0 && Priority(infix[inlen]) <= Priority(stack[pti]))       //栈不空且栈顶元素不为'('且满足优先级条件                 suffix[suflen++] = stack[pti--];             stack[++pti] = infix[inlen];      //栈为空的时候,当前运算符入栈         } else if (infix[inlen] == '(')  //为(             stack[++pti] = infix[inlen];          else if (infix[inlen] == ')')  //为）         {             while (pti >= 0 && stack[pti] != '(')                 suffix[suflen++] = stack[pti--];   //退栈并且输出出栈的运算符             if (stack[pti]>=0)                 pti--;             else                 cout << "Error\n";  //做一次退栈操作         } else  //其他字符             cout << "Error\n";      }     while (pti >= 0 && stack[pti] != '(')  //栈不空且栈顶元素不为'('时         suffix[suflen++] = stack[pti--];   //退栈并且输出出栈的运算符     suffix[suflen] = '\0';     if (pti >= 0)    //如果栈不空，报错         cout << "Error\n";      //测试     for (int i = 0; i <= suflen; i++)         cout << suffix[i];     //测试     cout<<endl;      return 0; } int Priority(char ch)  //将运算符的优先级转换为可比较大小的数字 {     if (ch == '+' || ch == '-')         return 1;     else if (ch == '*' || ch == '/')         return 2;     else if (ch == '^')         return 3;     else         return 0; } 问题是出在不细心。 对比一下这两个表达式的区别：  else if (Priority(infix[inlen]>0)) 和 else if (Priority(infix[inlen])>0) 的区别；