C++ 迪克斯特拉';C+中的s调车场算法+;
作为我的家庭作业,我必须编写一个程序来计算一个以字符串形式给出的方程式。程序的一部分是将中缀表达式解析为后缀的函数。这是我的密码:C++ 迪克斯特拉';C+中的s调车场算法+;,c++,rpn,shunting-yard,C++,Rpn,Shunting Yard,作为我的家庭作业,我必须编写一个程序来计算一个以字符串形式给出的方程式。程序的一部分是将中缀表达式解析为后缀的函数。这是我的密码: void dijkstra(string& s) { int i,j=s.size(); stack < char > znaki; string output=" "; string znak; for(i=0; i<j;++i) { if((int(s[i])>47&
void dijkstra(string& s)
{
int i,j=s.size();
stack < char > znaki;
string output=" ";
string znak;
for(i=0; i<j;++i)
{
if((int(s[i])>47&&int(s[i])<58)||s[i]=='.')
{
output+=s[i];
}
else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')
{
output+=" ";
if(znaki.empty())
{
}
else
{
if((s[i]=='+'||s[i]=='-'))
{
znak=znaki.top();
znaki.pop();
output+=znak;
}
else if(s[i]=='*')
{
if(znaki.top()=='*'||znaki.top()=='/')
{
znak=znaki.top();
znaki.pop();
output+=znak;
}
}
else if(s[i]=='/')
{
if(znaki.top()=='*'||znaki.top()=='/')
{
znak=znaki.top();
znaki.pop();
output+=znak;
}
}
}
znaki.push(s[i]);
}
else if(int(s[i])=='(')
{
znaki.push(s[i]);
}
else if(int(s[i])==')')
{
while(znaki.top()!='(')
{
output+=znaki.top();
znaki.pop();
}
znaki.pop();
}
}
while(znaki.empty()!=true)
{
output+=znaki.top();
znaki.pop();
}
s=output;
}
void dijkstra(字符串和s)
{
int i,j=s.size();
堆叠znaki;
字符串输出=”;
字符串znak;
对于(i=0;i47&&int(s[i]),您知道您可以比较字符文本而不是它们的ASCII值,例如s[i]=='*'
。将使您的代码更具可读性。而且您确实了解诸如?之类的函数,请用ASCII或字符文字(如“0”、“1”)替换幻数(如47、48等)。这将使您的程序更易于阅读、调试和更健壮。使用调试器时,哪一行导致了问题?如果dded打印语句,哪一行导致问题?