gpt4 book ai didi

c++ - 中缀到后缀 - 删除括号

转载 作者:行者123 更新时间:2023-11-30 05:44:09 27 4
gpt4 key购买 nike

无法从字符串中弹出括号。我输入一个中缀表达式,例如 (A+B)*C 并希望得到 AB+C*。相反,我得到 (AB)+C*。任何帮助将不胜感激。

 string Postfx::convertToPostfix(Postfx C,string in)
{
stack<char> S;
string postfx = "";



for (int i = 0; i<in.length();i++)
{
if (in[i] == ' ' || in[i] == ',') continue;

else if ((in[i]) == '+' || in[i] == '-' || in[i] == '/' || in[i] == '*')
{
while (!S.empty() && S.top() != '(' && C.precedence(S.top(), in[i]))
{
postfx += S.top();
S.pop();
}
S.push(in[i]);
}

else if ((in[i]) != '+' || in[i] != '-' || in[i] != '/' || in[i] != '*')
{
postfx += in[i];
}

else if (in[i] == '(')
{
S.push(in[i]);
}
else if (in[i] == ')')
{
while (!S.empty() && S.top() != '(')
{
postfx += S.top();
S.pop();
}
S.pop();
}
}

while (!S.empty()) {
postfx += S.top();
S.pop();
}

return postfx;
}

最佳答案

我认为你的

else if ((in[i]) != '+' || in[i] != '-' || in[i] != '/' || in[i] != '*')

line 也捕获括号,所以

else if (in[i] == '(')

以下永远不会被执行。

我觉得你应该搬家

else if ((in[i]) != '+' || in[i] != '-' || in[i] != '/' || in[i] != '*')

成为链式 if 中的最后一个选项。

此外,这个 if 绝对捕获 任何 符号(因为任何符号要么不等于 '+',要么不等于 '-')。您需要将 || 替换为 &&;但是如果你无论如何都会有这个 if 链式 if 中的最后一个,你根本不需要那里的条件,比如:

if ((in[i] == ' ')|| ...
else if ((in[i] == '+')|| ...
else if (in[i] == '(') ...
else if (in[i] == ')') ...
else postfx += in[i]; // no condition here

附言此外,如果您将初始表达式括在方括号中:

in = "(" + in + ")"

在循环之前,您不需要最后的 while (!S.empty()) 循环。

关于c++ - 中缀到后缀 - 删除括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29936179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com