中缀到后缀表达式转换代码不起作用
infix to postfix expression converting code not working
以下是我在cpp中将中缀转换为后缀表达式的代码?我已经尝试了所有的东西,但我的代码没有给我想要的结果?请有人帮帮我
虽然我认为代码是正确的,但它就是不起作用。我花了很多时间检查这个代码,并检查了每一行的工作情况,但它仍然不工作。
#include <iostream>
#include<conio.h>
using namespace std;
int k=-1,m=0;
int j=0;
string infi,postfi,operato;
int precedence(char s)
{
switch(s)
{
case '+':
case '-':
return 1;
break;
case '*':
case '/':
return 2;
break;
case '$':
return 3;
break;
case '(':
return 4;
break;
case ')':
return 5;
break;
}
}
void operat()
{
if(k==-1)
{
k++;
operato[k]=infi[j];
//cout<<operato[0]<<"mm";
}
else if(precedence(infi[j])==4)
{
//cout<<"0000";
k++;
operato[k]=infi[j];
}
else if(precedence(infi[j])==5)
{
//cout<<"0000";
while(operato[k]!='(')
{
postfi[m]=operato[k];
m++;
k--;
}
k--;
}
else if(precedence(infi[j])>precedence(operato[k]))
{
//cout<<"0000";
k++;
operato[k]=infi[j];
}
else
{
//cout<<"0000";
postfi[m]=operato[k];
k--;
m++;
operat();
}
//cout<<postfi[0]<<"pp";
}
int main()
{
cin>>infi;
while(infi[j]!=' ')
{
if(infi[j]=='+'||infi[j]=='-'||infi[j]=='*'||infi[j]=='/'||infi[j]=='('||infi[j]==')'||infi[j]=='$')
{
operat();
j++;
}
else
{
postfi[m]=infi[j];
//cout<<postfi[0];
//cout<<"me"<<m<<postfi[m];
m++;
j++;
}
}
while(k!=-1)
{
postfi[m]=operato[k];
//cout<<postfi[0];
//cout<<"me"<<m;
//cout<<"meow"<<m<<postfi[m];
k--;
m++;
}
//cout<<postfi[0];
int g;
for(g=0;g<m;g++)
cout<<postfi[g];
//getch();
return(0);
}
我尽可能保持它对你发布的内容的原始性,这样你就可以遵循它。根据你的需要修改它,我没有优化,我没有使用STL(因为我认为这是家庭作业,因为你没有使用STL),我写它是为了让它正常工作。正如我所说,你必须使用它才能获得你想要的优先级,但正如我所言,它是有效的。同样,我认为这是家庭作业:我也没有完成,只是希望能让你朝着正确的方向前进。
#include <iostream>
#include<conio.h>
using namespace std;
int precedence(char s)
{
int rVal = -1; //Let's assume we didn't succeed
switch(s)
{
case '+':
rVal = 7;
break;
case '-':
rVal = 6;
break;
case '*':
rVal = 5;
break;
case '/':
rVal = 4;
break;
case '^':
rVal = 3;
break;
case '(':
rVal = 2;
break;
case ')':
rVal = 1;
break;
default:
break;
}
return rVal; //This satisfies the warning
}
char getpres(int num)
{
char rVal = 0;
switch(num)
{
case 7:
rVal = '+';
break;
case 6:
rVal = '-';
break;
case 5:
rVal = '*';
break;
case 4:
rVal = '/';
break;
case 3:
rVal = '^';
break;
case 2:
rVal = '(';
break;
case 1:
rVal = ')';
break;
default:
break;
}
return rVal; //This satisfies the warning
}
string reorder(string temp)
{
string rVal = " ";
int *array = new int[temp.length()];
unsigned int d = 0;
for(unsigned int x = 0; x <= temp.length(); ++x )
{
array[x] = precedence(temp[x]);
}
for(unsigned int i = 0;i< temp.length() +1;i++)
{
for(unsigned int j = 1;j<i;j++)
{
if(array[i] > array[j])
{
d = array[i]; //swap
array[i]=array[j];
array[j]=d;
}
}
}
d = 0;
for(; d < temp.length(); ++d)
{
rVal += getpres(array[d]);
}
return rVal;
}
int main()
{
int itr=0;
string infi = "" ,postfi = "" ,operato = "";
std::cin>>infi;
while(itr <= infi.length())
{
if(precedence(infi[itr]) > -1)
{
operato += infi[itr];
}
else
{
postfi += infi[itr];
}
++itr;
}
postfi += reorder(operato);
std::cout<<postfi<<std::endl;
return 0;
}
相关文章:
- 为什么这段代码不起作用,我该如何解决?
- 为什么这些完全相似的代码不起作用?
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 注释一行使代码工作,而没有它,代码不起作用
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- C ++函数重新定义(代码不起作用 - 逻辑错误)
- 试图找到一个数字的平方根,但代码不起作用。C++
- 字符串代码不起作用
- 我正在努力在随机数组中查找最小值,有人知道为什么我的代码不起作用?C++
- 从 C++ 转换的 C# 代码不起作用
- 有人可以解释我,为什么我的代码不起作用吗?
- 当我使用长整型时,我的代码不起作用,它与 int 一起工作得很好
- 无法在控制面板中创建轨道栏.示例代码不起作用
- CUDA我的共享内存代码不起作用,我缺少什么
- 为什么 C++ 中的 shell 脚本代码不起作用?
- 为什么C++代码不起作用(strncpy_s)?
- 模板函数声明为 void - 代码不起作用?
- 无法弄清楚为什么这个Arduino代码不起作用?
- "check if member exists using enable_if"中修改的代码不起作用