永发信息网

急!关于数据结构栈程序的问题

答案:2  悬赏:30  手机版
解决时间 2021-05-12 03:51

各位帮我看看出了什么问题,程序一直运行不出来。明天就要交作业了,急死我了!

这是关于算术表达式的程序

#include<string>
#include<iostream>
using namespace std;
template <class Telem>
class SqStack
{
private:
Telem *elem;
int top;
int maxlen;
public:
SqStack(Telem a[],int n,int maxsz=100):maxlen(maxsz)
{
elem=new Telem[maxlen];
for(int i=n-1;i>=0;i--)elem[i]=a[i];
top=n-1;
};
~SqStack(){delete[] elem;};
void init(){top = -1;};
int leng(){ return top+1;};
bool push (Telem& el)
{ if (top==maxlen-1) return(false);
else { top=top+1;
elem[top]=el;
return(true);
};
};
Telem pop( )
{
if (top==-1) return NULL;
else return(elem[top--]);
};
Telem gettop( )
{
if (top==-1) return NULL;
else return(elem[top]);
};
bool full(){return top==maxlen-1;};
bool empt(){return top==-1;};
char rela(char symb1,char symb2)
{
char r[7][7]={
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}
};
char ch[2];int in[2];
ch[0]=symb1;ch[1]=symb2;
for(int i=0;i<2;i++)
switch(ch[i])
{
case'+':in[i]=0;break;
case'-':in[i]=1;break;
case'*':in[i]=2;break;
case'/':in[i]=3;break;
case'(':in[i]=4;break;
case')':in[i]=5;break;
case'#':in[i]=6;
};
return r[in[0]][in[1]];
};
int oprt(int a,int b,char op)
{
int re=0;
switch(op)
{
case'+':re=a+b;break;
case'-':re=a-b;break;
case'*':re=a*b;break;
case'/':re=a/b;break;
};
return re;
};

bool comp(string st,int &v)
{
SqStack<int>sopnd;
SqStack<char>soprt;
char ch,symb,op; int a,b,i;
soprt.push('#');
symb=st[2]; i=3;
while (symb!='.')
{
if (( symb!='+')&&( symb!='-')&& (symb!='*')&& (symb!='/')&&( symb!='(')&&(symb!=')')&& (symb!='#'))
{
sopnd.push(int (symb));
symb=st[i]; i++;
}
else {
ch= soprt.gettop();
switch(rela(ch,symb))
{
case'<':
soprt.push(symb);
symb=st[i];i++;break;
case'=':
soprt.pop();
symb=st[i];i++;break;
case'>':
op=soprt.pop();
b=sopnd.pop(); a=sopnd.pop();
sopnd.push(oprt(a,b,op));
}
}
}
if (soprt.empt())
{
v=sopnd.gettop();
return true;
}
else return false;
} ;
};
void main()
{
int v;
string s;
cout<<"请输入算术表达式:";
cin>>s;
cout<<s;
comp(s,v);
cout<<"结果为"<<v;

}

最佳答案
用断点法检查一下,手机上的,不方便阅读!谢谢采纳!
全部回答

#include<string> #include<iostream> using namespace std; template <class Telem> class SqStack { private: Telem *elem; int top; int maxlen; public: SqStack(Telem a[],int n,int maxsz=100):maxlen(maxsz) { elem=new Telem[maxlen]; for(int i=n-1;i>=0;i--)elem[i]=a[i]; top=n-1; }; ~SqStack(){delete[] elem;}; void init(){top = -1;}; int leng(){ return top+1;}; bool push (Telem& el) { if (top==maxlen-1) return(false); else { top=top+1; elem[top]=el; return(true); }; }; Telem pop( ) { if (top==-1) return NULL; else return(elem[top--]); }; Telem gettop( ) { if (top==-1) return NULL; else return(elem[top]); }; bool full(){return top==maxlen-1;}; bool empt(){return top==-1;}; char rela(char symb1,char symb2) { char r[7][7]={ {'>','>','<','<','<','>','>'}, {'>','>','<','<','<','>','>'}, {'>','>','>','>','<','>','>'}, {'>','>','>','>','<','>','>'}, {'<','<','<','<','<','=',' '}, {'>','>','>','>',' ','>','>'}, {'<','<','<','<','<',' ','='} }; char ch[2];int in[2]; ch[0]=symb1;ch[1]=symb2; for(int i=0;i<2;i++) switch(ch[i]) { case'+':in[i]=0;break; case'-':in[i]=1;break; case'*':in[i]=2;break; case'/':in[i]=3;break; case'(':in[i]=4;break; case')':in[i]=5;break; case'#':in[i]=6; }; return r[in[0]][in[1]]; }; int oprt(int a,int b,char op) { int re=0; switch(op) { case'+':re=a+b;break; case'-':re=a-b;break; case'*':re=a*b;break; case'/':re=a/b;break; }; return re; }; }; bool comp(string st,int &v) { SqStack<int>sopnd; SqStack<char>soprt; char ch,symb,op; int a,b,i; soprt.push('#'); symb=st[2]; i=3; while (symb!='.') { if (( symb!='+')&&( symb!='-')&& (symb!='*')&& (symb!='/')&&( symb!='(')&&(symb!=')')&& (symb!='#')) { sopnd.push(int (symb)); symb=st[i]; i++; } else { ch= soprt.gettop(); switch(rela(ch,symb)) { case'<': soprt.push(symb); symb=st[i];i++;break; case'=': soprt.pop(); symb=st[i];i++;break; case'>': op=soprt.pop(); b=sopnd.pop(); a=sopnd.pop(); sopnd.push(oprt(a,b,op)); } } } if (soprt.empt()) { v=sopnd.gettop(); return true; } else return false; } ; }; void main() { int v; string s; cout<<"请输入算术表达式:"; cin>>s; cout<<s; comp(s,v); cout<<"结果为"<<v;

}

少了个右花括号, 还有其他威尔提我就不帮你排了 , 自己来吧, soso没有格式控制 ,看的眼花

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
聊天记录就没有了,想找回来
如何评价英语专业的人才培养目标
手机淘宝网是?
家庭教师 蓝波铃声下载
大家谁能告诉我西安今年会下雪吗?
QQ炫舞怎么P的好?
秦半两圆形方孔铜钱在中国历史上有着什么重大
CSOL延遲高!
我电脑上面的系统漏洞老是有几个修复不好.怎
无心法师岳绮罗爱谁,无心法师中岳绮罗为什么
电气信息类专业怎样
关于蓝牙组件的PPT 该怎么做??
简短祝比赛成功祝福语,祝福别人考试成功的诗
为什么赵梦杰出问题了呢?
蜗居里的那些人都是什么星座的?
推荐资讯
飞车紫钻开宝盒是每天可以开一次么?
DNF白手用什么连发工具好?
班长对同学的评语大全,班长给同学写评语该怎
山药意仁粉
孕妇喝牛奶会不会便秘,茶叶吃多了会便秘吗
跑酷用装备什么好?
有没有可以提高象棋水平的游戏或软件?
大话3怎么挂失啊
QQ炫舞中 怎么在 官网中的 玩家视频里 找到自
如果智齿还有点发炎能不能拔呢?拔完大概要回
为什么我开了会员不能设置“好友上线通知、离
监 狱 警 察 的职业病
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?