2013-10-14 54 views
-5

我製作了以下程序來將中綴轉換爲profix,但我得到一個運行時錯誤。將中綴轉換爲profix

運行時檢查失敗#2 - 圍繞變量's'的堆棧已損壞。

main.cpp中:

#include "stack.h" 

int main() 
{ 
    stack<char> s; 
    char infix_exp[100]={NULL}; 
    ofstream file; 

    file.open("Infix.txt",ios::binary); 
    cout<<"Enter the Infix Expression:"; 
    cin.getline(infix_exp,80); 
    file<<infix_exp; 
    file.close(); 
    s.coversion(infix_exp); 
    return 0; 
} 

stack.h:

#include <iostream> 
#include <fstream> 
#include <string> 
#include <stdlib.h> 
#include <conio.h> 

using namespace std; 

template <class T> 
class stack 
{ 
    int top; 
    char Stack[100]; 

    public: 

    stack(); 
    void push(const char); 
    const char pop(); 
    void coversion(const char*);  
}; 


template <class T> 
stack<T>::stack() 
{ 
    top=-1; 
    Stack[100]=NULL; 
} 

template <class T> 
void stack<T>::push(const char Symbol) 
{ 
    if(top==99) 
     cout<<"Error : Stack is full."<<endl; 
else 
    { 
     top++; 
     Stack[top]=Symbol; 
    } 
} 

template <class T> 
const char stack<T>::pop() 
{ 
    char Symbol=NULL; 
    if(top==-1) 
     cout<<"Error : Stack is empty."<<endl; 
    else 
    { 
     Symbol=Stack[top]; 
     Stack[top]=NULL; 
     top--; 
    } 
    return Symbol; 
} 

template <class T> 
void stack<T>::coversion(const char *infix) 
{ 
    char infix_exp[100]={NULL}; 
    char postfix_exp[100]={NULL}; 
    strcpy(infix_exp,"("); 
    strcat(infix_exp,infix); 
    strcat(infix_exp,")"); 

    char Symbol[5]={NULL}; 
    char Temp[5]={NULL}; 

    for(int count=0; count<strlen(infix_exp); count++) 
    { 
     Symbol[0]=infix_exp[count]; 
     if(Symbol[0]=='(') 
      push(Symbol[0]); 
     else 
      if(Symbol[0]==')') 
      { 
       Symbol[0]=pop(); 
       while(Symbol[0]!='(') 
       { 
        strcat(postfix_exp,Symbol); 
        Symbol[0]=pop(); 
       } 
      } 
      else 
       if (Symbol[0]=='^' || Symbol[0]=='*' || 
        Symbol[0]=='/' || Symbol[0]=='+' || Symbol[0]=='-') 
       { 
        if (Symbol[0]=='*' || Symbol[0]=='/') 
        { 
         Temp[0]=pop(); 
         while(Temp[0]=='^' || Temp[0]=='*' || Temp[0]=='/') 
         { 
          strcat(postfix_exp,Temp); 
          Temp[0]=pop(); 
         } 
         push(Temp[0]); 
        } 
        else 
         if(Symbol[0]=='+' || Symbol[0]=='-') 
         { 
          Temp[0]=pop(); 
          while(Temp[0]!='(') 
          { 
           strcat(postfix_exp,Temp); 
           Temp[0]=pop(); 
          } 
          push(Temp[0]); 
         } 
        push(Symbol[0]); 
       } 
       else 
        strcat(postfix_exp,Symbol); 

    } //for 
    cout<<"Postfix Expression : "<<postfix_exp<<endl; 
    ofstream pfile; 
    pfile.open("PostFix.txt",ios::binary); 
    pfile<<postfix_exp; 
    pfile.close(); 
} 

回答

4

stack構造函數,你acessing的Stack成員出界:Stack[100]=NULL;

它的聲明爲char Stack[100];因此您只能訪問Stack[0] .. Stack[99]

+0

那我該怎麼辦? –

+0

@wasaamqazi只要刪除這一行。 – Henrik