本文共 2196 字,大约阅读时间需要 7 分钟。
在编程中,括号匹配是一个常见的问题,通常用于检查表达式中的括号是否正确配对。我们可以使用栈(Stack)数据结构来实现这一功能。以下是一个使用Objective-C实现括号匹配的完整示例。
将以下代码复制到main.m文件中:
#import// 定义一个简单的栈类@interface Stack: NSObject @property (strong, nonatomic) id element; @property (strong, nonatomic) Stack *nextStack; -(void)push:(id)element; -(id)peek; -(id)pop; -(BOOL)isEmpty;@end@interface BracketMatcher: NSObject @property (strong, nonatomic) Stack *stack; -(void)checkString:(NSString *)string; -(void)startChecking;@end@interface StackElement: NSObject @property (strong, nonatomic) NSString *char; @property (strong, nonatomic) StackElement *next;@end@implementation StackElement@end@implementation Stack-(void)push:(id)element { self.element = element;}-(id)peek { return self.element;}-(id)pop { id element = self.element; self.element = nil; return element;}-(BOOL)isEmpty { return self.element == nil;}@end@implementation BracketMatcher-(void)checkString:(NSString *)string { [self startChecking];}-(void)startChecking { Stack *stack = [[Stack alloc] init]; self.stack = stack; for (NSInteger i = 0; i < [string length]; i++) { id currentChar = [string characterAtIndex:i]; if ([currentChar isEqualToString:@"("]) { [self.stack push:currentChar]; } else if ([currentChar isEqualToString:@")"]) { if ([self.stack peek] == nil) { // 匹配失败 NSAssert(false, @"括号没有匹配"); } else { [self.stack pop]; } } else { // 忽略其他字符 } } while (!([self.stack isEmpty])) { // 栈中还有未匹配的括号,匹配失败 NSAssert(false, @"括号没有全部匹配"); }}@end
栈类实现:定义了一个Stack类,用于存储括号字符。包含push、peek、pop和isEmpty方法来管理栈操作。
括号匹配器类:BracketMatcher类负责检查输入字符串中的括号是否正确配对。通过遍历字符串中的每个字符,使用栈来跟踪左括号的位置。
字符处理逻辑:对于每个字符,检查是否为左括号(,如果是,则将其推入栈中;如果为右括号),则检查栈顶部是否有对应的左括号。如果栈为空,表示括号没有匹配,否则弹出栈顶部元素。
错误检查:在匹配过程中,使用NSAssert进行错误检查,确保括号正确配对。
通过上述代码,可以实现对输入字符串中的括号是否正确配对的检查。该方法利用栈的先进后出特性,确保了括号匹配的正确性。
转载地址:http://qmifk.baihongyu.com/