首先規定優先順序,括號為最高優先順序,乘號或除號為次優先順序,加或減號為最低優先順序,至於數字,碰到就直接輸出即可。
既然是數字,就有小數,整數,正數,負數之分,還有關於二元運算子的輸出,在括號內的二元運算子優先輸出,優先順序高的優先輸出(當然括號不算啊)
根據題意,在輸出時可分為以下幾種情況。
#include#include#include#include#include#include#includeusing namespace std;
stacksign;
char s[22];
mapmp;
int main()
if(isfirst)
isfirst = false;
}else if(s[i] >= '0' && s[i] <= '9')
if(isfirst)
isfirst = false;
}else if(s[i] == ')')
if(!sign.empty() && sign.top() == '(')
sign.pop();
}else if(sign.empty() || (mp[s[i]] > mp[sign.top()]))
sign.push(s[i]);
else
sign.push(s[i]);}}
while(!sign.empty())
}
關於這道題,如果讓你輸出這個表示式的值,可以這樣做。
安排兩個棧,分別存數字和符號,具體要求如下。(該程式還有欠缺,目前對帶正號的正數以及小數不支援,只支援正常的整數混合運算)
#include#include#include#include#includeusing namespace std;
stacknum;
stackoper;
mapmp;
char s[22];
void solve(int a, int b, char o)
int main()
else if(mp[oper.top()] > mp[s[i]])
if(oper.top() == '(')
oper.pop();
}else
oper.push(s[i]);}}
}}}while(!oper.empty())
cout << num.top() << endl;
}
5 20 表示式轉換 25分
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
5 20 表示式轉換 25分
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
7 1 表示式轉換(25 分)
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...