用的方法挺笨的,搞了一个半小时,结果还不对,哪位大佬能帮忙看一下哪里出错了。
#includeusing namespace std; //中缀表达式转后缀表达式 typedef struct Stack { char* Data; int Maxsize; int Top; }*stack; stack createstack(int max) { stack S = new Stack(); S->Maxsize = max; S->Data = new char[max]; S->Top = -1; return S; } bool IsFull(stack S) { if (S->Top == S->Maxsize - 1) { return true; } return false; } void Push(stack S, char X) { S->Data[++S->Top] = X; } bool IsEmpty(stack S) { if (S->Top == -1) { return true; } return false; } char Get(stack S) { return S->Data[S->Top--]; } void Print(stack S) { while (1) { if (IsEmpty(S)) { break; } else { char temp = Get(S); if (IsEmpty(S)) { cout << temp; } else { cout << temp << ' '; } } } } bool First(char c1, char c2) { if (c1 == '*' || c1 == '/') { if (c2 == '(') { return true; } else { return false; } } else if (c1 == '(') { return true; } else { if (c2 == '*' || c2 == '/' || c2 == '(') { return true; } else { return false; } } } int main() { string L; cin >> L; int len = L.length(); stack S = createstack(len); for (int i = 0; i < len; i++) { char c = L[i]; if (c >= '0' && c <= '9') { cout << c <<' '; } else { if (IsEmpty(S)) { Push(S, c); } else { if (c == ')') { while (1) { char ctemp1 = Get(S); if (ctemp1 == '(') { break; } cout << ctemp1 << ' '; } continue; } char ctemp = Get(S); if (First(ctemp, c)) { Push(S, ctemp); Push(S, c); } else { Push(S, ctemp); while (1) { if (IsEmpty(S)) { Push(S, c); break; } char ctemp1 = Get(S); if (First(ctemp1, c)) { Push(S, ctemp1); Push(S, c); break; } cout << ctemp1 << ' '; } } } } } Print(S); system("pause"); return 0; }



