2016-03-03 62 views
-1

我在檢查大括號和大括號。假設這是我的輸入打開關閉大括號檢查

{XYZ {njdjd {lkdf} FJ} JF}

當我編譯輸入開括號和右括號要分開,並存儲在列表中,我用下面的代碼

`List<Match> open=new List<Match>(); 
     List<Match> close = new List<Match>(); 

     MatchCollection openbrace = Regex.Matches(MELEdtior, "{"); 
     foreach(Match o in openbrace) 
     { 
      open.Add(o); 
     } 
     MatchCollection closebrace = Regex.Matches(MELEdtior, "}"); 
     foreach(Match c in closebrace) 
     { 
      close.Add(c); 
     } 

這是完美的工作,我有兩個單獨的列表與開放和緊支撐。

現在我想比較兩個列表,並將打開和關閉大括號對。如果任何人打開或關閉錯過了這一對意味着要顯示錯誤。因爲我用於每個循環。我所面對的意思是一個開放的大括號,用來檢查所有的大括號。但我想用一個大括號檢查開放式支架。

if(open.Count==close.Count) 
     { 
     foreach(var openi in open) 
     { 
      foreach(var closei in close) 
      { 
       if(openi != closei) 
       { 

       } 
       else { return "failed"; } 
      } 
     } 

     } 
     else{return "count failed";} 

     return ""; 

出了什麼問題?

+0

您需要重新審視您的方法。用當前的邏輯,下面的表達式將會通過:} xyz} njdjd} lkdf {fj {jf {。這是預期的嗎? – teenboy

+0

不只是引導我,如何比較一個列表項目與另一個列表項目 –

+0

如果你想驗證字符串有一個平衡的開放和關閉大括號的數量,請參見[本演示](http://ideone.com/9lVzTV) 。 [Regex demo](http://regexstorm.net/tester?p=%5e%5b%5e%7b%7d%5d*(%3f%3a%7b(%3f%3e%5b%5e%7b%7d %5D%7C(%3F%3CO%3E%7B)%7C(%3F%3CO%3E%7D))*(%3F(O)(%3F!))%7D)*%5B%5E %7b%7d%5d *%24&i =%7bddd%7bddd%7dddd%7d) –

回答

0

單循環運行這兩個集合應該可以解決您的問題。

 if (open.Count == close.Count) 
     { 
      var listCount = open.Count; 

      for (var i = 0; i < listCount; i++) 
      { 
       if (open[i] != close[i]) 
       { 
       } 
       else 
       { 
        return "failed"; 
       } 
      } 
     } 
     else 
     { 
      return "count failed"; 
     } 
     return "passed"; 
相關問題