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) { ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.