2016-01-30 34 views
0

下面我已經上傳了一個代碼來檢查字符串中的括號是否平衡或不使用堆棧。它爲1輸入工作,但對於多個測試用例正確輸出不能正常工作。請提前幫助。錯誤的輸出,當使用測試用例時,它工作正常(使用堆棧)

int main() 
{ 
    int t; 
    cin >>t; 
    cin.ignore(); 
    while(t--) 
    { 
     { 

      stack s; 
      char *st; 
      st=new char[100]; 
      gets(st); 

      s.create(strlen(st)); 

      if(!count_elem(st))//counts if the brackets are in pairs or not 
       cout << "NO" <<endl; 
      else 
      func1(s,st); 

     } 
    } 
    return 0; 
} 


void func1(stack s,char *st) 
{ 
    static int i=0,flag=0; 
    // printf("%d %d\n",i,flag); 
    if(st[i]=='(' || st[i]=='{' || st[i]=='[') 
    { 
     flag=1; 
     s.push(st[i]); 
    } 
    else 
     { 
      if(s.isEmpty()) 
       flag=0; 
      else 
      { 

       if(st[i]=='}') 
        { 
         //printf("%c\n",s.get_top()); 
         if(s.get_top()=='{') 
         { 
          flag=1; 
          s.pop(); 

         } 
         else 
          flag=0; 

        } 

       if(st[i]==')') 
        { 
         //printf("%c\n",s.get_top()); 
         if(s.get_top()=='(') 
         { 
          flag=1; 
          s.pop(); 

         } 
         else 
          flag=0; 

        } 

      if (st[i]==']') 
        { 
         //printf("%c\n",s.get_top()); 
         if(s.get_top()=='[') 
         { 
          flag=1; 
          s.pop(); 

         } 
         else 
          flag=0; 

        } 
      } 
     } 
    i++; 
    if(flag==1) 
    { 
     if(i<strlen(st)) 
     func1(s,st); 
     else 
      cout << "YES"<<endl; 
    } 

     else 
     cout << "NO"<< endl; 



} 
+0

對於哪種測試用例會失敗? – Beta

+0

第一個測試用例總是正確的,但它只是顯示了隨後所有其他測試用例的隨機輸出。 – cooltogo

+0

第一個,呃?我並沒有問你*有多少*測試失敗,我沒有問你*按照什麼順序*你運行通過和失敗的測試,我要求一個失敗的測試用例。投票結束。 – Beta

回答

0

的問題是什麼?當程序從一個測試用例去到另一個,它不會重新初始化I = 0,標誌= 0 ...因爲它們已經被聲明爲靜態variables.What可以做到取而代之的是......聲明我,全局標誌....並分配i = 0;標誌= 0;就在對每個測試用例進行第一次func()調用之前。......

int main() 

{ 
    int t; 
    cin >>t; 
    cin.ignore(); 
    while(t--) 
    { 
     { 

      stack s; 
      char *st; 
      st=new char[100]; 
      gets(st); 

      s.create(strlen(st)); 

      if(!count_elem(st)) 
       cout << "NO" <<endl; 
      else 
      { 
       i=0; 
       flag=0; 
       func1(s,st); 

      } 


     delete []st; 
     } 
    } 
    return 0; 
} 
相關問題