使2+3*(7-4)+8/4变成2 3 7 4 - * + 8 4 / +的编程程序

请设计程序将中缀表达式转换为后缀表达式。输入输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出在一行中输出转换后的后... 请设计程序将中缀表达式转换为后缀表达式。
输入输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
展开
 我来答
mojinhen
2015-07-01 · 超过55用户采纳过TA的回答
知道小有建树答主
回答量:106
采纳率:0%
帮助的人:116万
展开全部
这个是我之前写的代码,只是没把括号的情况加进去。你参考参考
std::vector<std::string> PostFixStatement::infixToPostfix(const std::vector<std::string> &initialStmt)
{
std::stack<std::string> first;
std::stack<std::string> second;
first.push(initialStmt[0]);

for (size_t i = 1; i < initialStmt.size(); i++)
{
//if the precedence of parameter 1 is lower than parameter 2
//it will be pop from the stack and add to final expression (store in stack 2)
while (!first.empty() && checkPrecedence(first.top(), initialStmt[i]))
{
second.push(first.top());
first.pop();
}
first.push(initialStmt[i]);
}

//pop out everything
while (!first.empty())
{
second.push(first.top());
first.pop();
}

//create return list
std::vector<std::string> result(initialStmt.size());
for (int i = (int) initialStmt.size() - 1; i >= 0; i--)
{
result[i] = second.top();
second.pop();
}

return result;
}

//check for operator
bool isOperator(const std::string &str)
{
return ((str == "-") || (str == "+") || (str == "*"));
}

//return true if str1 has higher or equal precedence than str2
bool checkPrecedence(const std::string &str1, const std::string &str2)
{
if (isOperator(str1) && isOperator(str2))
{
if ((str1 == "+" || str1 == "-") && str2 == "*")
{
return false;
}
}
else if (isOperator(str1) && !isOperator(str2))
{
return false;
}

return true;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式