O'Reilly logo

C# Cookbook by Jay Hilyard, Stephen Teilhet

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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) { ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required