10.4. Determining Where Characters or Strings Do Not Balance
Problem
It is not uncommon to accidentally create strings that contain unbalanced parentheses. For example, a user might enter the following equation in your calculator application:
(((a) + (b)) + c * d
This equation contains four ( characters while
only matching them with three ) characters. You
cannot solve this equation, since the user did not supply the fourth
) character. Likewise, if a user enters a regular
expression, you might want to do a simple check to see that
all
the (,
{, [, and
< characters match up to every other
), }, ], and
> character.
In addition to determining whether the characters/strings/tags match, you should also know where the unbalanced character/string/tag exists in the string.
Solution
Use the various Check methods of the
Balance class to determine whether and where the
character/string is unbalanced:
using System; using System.Collections; public class Balance { public Balance( ) {} private Stack bookMarks = new Stack ( ); public int Check(string source, char openChar, char closeChar) { return (Check(source.ToCharArray( ), openChar, closeChar)); } public int Check(char[] source, char openChar, char closeChar) { bookMarks.Clear( ); for (int index = 0; index < source.Length; index++) { if (source[index] == openChar) { bookMarks.Push(Index); } else if (source[index] == closeChar) { if (bookMarks.Count <= 0) { return (index); } else { bookMarks.Pop( ); } } } if (bookMarks.Count > 0) { ...