美文网首页
Object-c 使用栈实现符号匹配

Object-c 使用栈实现符号匹配

作者: 劉胡來 | 来源:发表于2020-05-11 14:47 被阅读0次
  • 基本思想:

对于读入的字符串,按顺序依次读取一个字符,如果该字符为左分隔符,则将其存入栈中。如果发现一个右分隔符,则与栈中弹出的元素相比较。如果二者相互匹配,则继续处理将标志match修改为true。反之中断处理并提示出错同时将标志macth修改为fasle。到达字符串末尾时检测栈是否为空与标志的状态得到匹配的最终结果

BOOL result = stack.isEmpty() && match
  • 核心代码如下:
-(BOOL)match:(NSString *)str{
    BOOL result = false;
    if (str) {
        if (!self.stack) {
            self.stack = [[Stack alloc] initWithSize:[str length]];
        }
        for(int i = 0;i < [str length]; i++){
           NSString *ch = [str substringWithRange:NSMakeRange(i,1)];
            NSLog(@"34-----------:%@",ch);
            if ([ch isEqualToString:@"["] || [ch isEqualToString:@"("] || [ch isEqualToString:@"{"]) {
                [self.stack push:ch];
                [self.stack test];
            }else if([ch isEqualToString:@"]"] || [ch isEqualToString:@")"] || [ch isEqualToString:@"}"]){
                if(![self.stack isEmpty]){
                    NSString* leftChar = (NSString*)[self.stack pop];
                    if ([ch isEqualToString:@")"] && [leftChar isEqualToString:@"("]) {
                        NSLog(@"41-------()匹配成功进行下一次匹配");
                        result = true;
                        continue;
                    }else if ([ch isEqualToString:@"]"] && [leftChar isEqualToString:@"["]) {
                        NSLog(@"44-------[]匹配成功进行下一次匹配");
                        result = true;
                        continue;
                    }else if ([ch isEqualToString:@"}"] && [leftChar isEqualToString:@"{"]) {
                        NSLog(@"44-------[]匹配成功进行下一次匹配");
                        result = true;
                        continue;
                    }else{
                        result = false;
                        NSLog(@"48-------匹配失败,待匹配的元素情况为:出栈元素:%@,遍历到的元素为:%@",leftChar,ch);
                        [self.stack test];
                    }
                }else{
                    result = false;
                    NSLog(@"55-------匹配失败,多了字符:%@",ch);
                }
            }
        
        }
        if ([self.stack isEmpty] && result) {
            NSLog(@"64-------匹配成功");
        }else{
            NSLog(@"66-------匹配失败");
        }
        
    }
    
    return [self.stack isEmpty] && result;
}
  • 测试接口:
[self.delimiterMatch match:@"(liu{09f[0]9-=)"];
  • 实验失败例子:


    image.png

*实验成功例子:

[self.delimiterMatch match:@"(liu{09f[0]9-}=)"];
image.png

相关文章

  • Object-c 使用栈实现符号匹配

    基本思想: 对于读入的字符串,按顺序依次读取一个字符,如果该字符为左分隔符,则将其存入栈中。如果发现一个右分隔符,...

  • 机试常用算法和题型-栈和队列专题

    堆栈+ordermap使用括号匹配 堆栈使用简单计算器 栈+队列实现中缀转后缀,计算后缀表达式 栈+队列计算,包括...

  • Object-c 使用栈实现迷宫

    关于本例子中用到的栈结构请参看:https://www.jianshu.com/p/c941b224a69d 迷宫...

  • 通配符、管道符、输入输出重定向及变量

    通配符 glob 通配符就是通用的匹配信息的符号;使用特殊的字符(称之为元字符),实现对相关的文件名进行匹配,实现...

  • 20. Valid Parentheses

    使用栈数据结构: 遇到左括号,需要压栈。 遇到右括号,判断栈顶是否和当前右括号匹配;若不匹配则返回false,否则...

  • 算法-栈和队列算法总结

    栈和队列算法总结 1 模拟 1.1 使用栈实现队列 1.2 使用队列实现栈 2 栈的应用 2.1 栈操作 2.2 ...

  • 栈的应用

    1.括号匹配 算法思路:从第一个字符扫描遇到普通字符忽略,遇到左符号压入栈中,继续扫描,遇到右符号时从栈中弹出进...

  • object-c 栈的实现

    栈释义 栈是一种线性数据结构,存储以及查找数据时只能访问栈的一端。类似于餐厅的盘子,新盘子放到这一叠盘子最上面,取...

  • 第三章第7节 预测分析中的错误检测

    预测分析中的错误检测 两种情况下可以检测到错误1.栈顶的终结符和当前输入符号不匹配2.栈顶非终结符与当前输入符号在...

  • js实现计算有小括号的加减乘除表达式

    主要函数如下: 1.匹配最内括号 2.只含加减乘除的表达式计算(通过两个数组分别保存数字和符号进行进出栈操作实现*...

网友评论

      本文标题:Object-c 使用栈实现符号匹配

      本文链接:https://www.haomeiwen.com/subject/afyunhtx.html