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

一到数据结构问题 求改错
本帖最后由 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;