45 lines
2.6 KiB
Plaintext
45 lines
2.6 KiB
Plaintext
include "NSLog.incl"
|
|
|
|
local fn BracketBalance( strWithBracket as CFStringRef ) as CFStringRef
|
|
NSInteger i, bracketTracker = 0
|
|
CFStringRef result
|
|
|
|
CFCharacterSetRef bracketSet = fn CharacterSetWithCharactersInString( @"[]" )
|
|
CFCharacterSetRef bracketsOnlySet = fn CharacterSetInvertedSet( bracketSet )
|
|
CFArrayRef trimmedSArray = fn StringComponentsSeparatedByCharactersInSet( strWithBracket, bracketsOnlySet )
|
|
CFStringRef trimmedStr = fn ArrayComponentsJoinedByString( trimmedSArray, @"" )
|
|
|
|
NSUInteger strLen = len( trimmedStr )
|
|
|
|
// Empty string, no brackets
|
|
if ( strLen == 0 ) then result = @"No brackets" : exit fn
|
|
// String with odd number of brackets is unbalanced
|
|
if ( strLen mod 2 ) then result = @"Unbalanced" : exit fn
|
|
|
|
for i = 0 to strLen - 1
|
|
CFStringRef bracket = fn StringWithFormat( @"%C", fn StringCharacterAtIndex( trimmedStr, i ) )
|
|
if fn StringisEqual( bracket, @"[" ) then bracketTracker++
|
|
if fn StringisEqual( bracket, @"]" ) then bracketTracker--
|
|
if bracketTracker < 0 then result = @"Unbalanced" : break
|
|
next
|
|
if bracketTracker == 0 then result = @"Balanced"
|
|
end fn = result
|
|
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"" ) ), @"" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[" ) ), @"[" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"]" ) ), @"]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[]" ) ), @"[]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[]" ) ), @"[[]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[]]" ) ), @"[]]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[][]" ) ), @"[][]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][" ) ), @"][" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][][" ) ), @"][][" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[]][][][[][]]" ) ), @"[[]][][][[][]]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][[]][][][]]][[" ) ), @"][[]][][][]]][[" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[[abc]][[d]]]]]" ) ), @"[[[abc]][[def]]]]]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[[abc]]][[[[[d]]]]]" ) ), @"[[[abc]]][[[[[def]]]]]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[][abc]]][[[[[d]]]]]" ) ), @"[][abc]]][[[[[def]]]]]" )
|
|
NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"The quick brown fox" ) ), @"The quick brown fox" )
|
|
|
|
HandleEvents
|