2016-03-03 94 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";