读书人

一到数据结构有关问题 求改错

发布时间: 2013-10-14 12:54:46 作者: rapoo

一到数据结构问题 求改错
本帖最后由 u011267262 于 2013-10-13 12:03:23 编辑


// 输入一个表达式 看它是不是括号配对
#include<iostream>
#include<string>
using namespace std;


struct Stack
{

char *base;
char *top;
int size;

};

void InitStack(Stack &stack,int size)
{
stack.base=new char[size];

stack.top=stack.base;
stack.size=size;

}


void Push(Stack &stack,char s)
{

*stack.top=s;
stack.top++;
}

void Pop(Stack &stack)
{

stack.top--;

}


int main()
{
Stack s;
InitStack (s,20);
char ch[50];
cout << "输入表达式"<<endl;
cin>>ch;

for(int i;i<strlen(ch);i++)
{
if(ch[i]=='(')
{
*s.top=ch[i];
s.top++;
}
else if (ch[i]==')')
{
s.top--;
}



}
if(s.top == s.base)
{
cout<<"表达式的括号是配对的。"<<endl;
}
else
{
cout<<"表达式的括号不是配对的。"<<endl;
}
}
数据结构
[解决办法]
第49行i需要初始化吧,int i=0;
[解决办法]
1)Push,Pop做啥用的?????
2)分配的内存要释放

void DestroyStack(Stack &s){
delete[] s.base;
}
int main()
{
Stack s;
InitStack (s,20);
char ch[50];
cout << "输入表达式"<<endl;
cin>>ch;

for(int i;i<strlen(ch);i++){
//简洁版,可能会出错。
if(ch[i]=='(')
Push(s,ch[i]);
else if (ch[i]==')')
Pop(s);
}
if(s.top == s.base)
{
cout<<"表达式的括号是配对的。"<<endl;
}
else
{
cout<<"表达式的括号不是配对的。"<<endl;
}
DestroyStack(s);
return 0;
}

//精细版
int main(){
Stack s;
InitStack (s,20);
char ch[50];
int error=0;
cout << "输入表达式"<<endl;
cin>>ch;

for(int i;i<strlen(ch);i++)
{

if(ch[i] != ')') Push(s,ch[i]);
else {
while(s.top !=s.base && *(s.top) !='(')
{
Pop(s);
}
if(*s.top !='('){
cout<<"表达式的括号不是配对的,丢失左括号 \'(\'。"<<endl;
error++;
}
}
}
if(error ==0 ){
if(s.top == s.base)
{
cout<<"表达式的括号是配对的。"<<endl;


}
else
{
cout<<"表达式的括号不是配对的。丢失右括号 \')\'"<<endl;
}
}
DestroyStack(s);
return 0;
}

读书人网 >C语言

热点推荐