清除字符串中的嵌套括号

给定一个如下的字符串(1,(2,3),(4,(5,6)7))括号内的元素可以是数字,也可以是括号,请实现一个算法清除嵌套的括号,比如把上面的表达式的变成:(1,2,3,4,5,6,7),表达式有误时请报错。

参考答案:
最终结果中只有左右括号和逗号,而且左右括号在固定位置,这个比较好处理 , 在result的开始和结束位置加上()即可 。
现在就可以把原字符串的符号看成数字的分隔符,都统一的改成逗号,追加进result中 , 在追加前 在处理下result,防止出现重复的符号,比如(1,(2,3,)4) ->  3,,4
至于错误 , 我们只需要加两个变量分别来记录左圆括号和右圆括号的个数,如果左右括号数量不一致 就认为出错了。代码如下:

#import <Foundation/Foundation.h>
 
void remove_inline_brackets(char *str) {
    
    int i = 0;
    // 记录左括号,右括号的数量
    int left = 0;
    int right = 0;
    // 最后的结果数组
    char result[100] = "(";
    int j = 1; // 记录result的下标
    while (str[i] != '\0') {
        
        // 把左括号,右括号都变成逗号分隔,然后在去除重复的逗号
        if (str[i] == '(') {
            left ++;
            str[i] = ',';
        }
        if (str[i] == ')') {
            right ++;
            str[i] = ',';
        }
        // 是逗号,看看是否需要去除重复
        if (str[i] == ',') {
            // 如果result的前一个元素是标点了,那就是符号重复了,不追加
            if (result[j-1] == ',' || result[j-1] == '('  || result[j-1] == ')' ) {
                i++;
                continue;
            }
            
        }
        // 到这里说明是数字或者不重复的标点了,追加到result中
        result[j] = str[i];
        j++;
        i++;
    }
    result[j] = ')';
    result[j+1] = '\0';
    
    // 左括号和右括号数量不一致
    if (left != right) {
        printf("error,左括号和右括号数量不一致\n");
        return;
    }
    printf("结果:%s \n",result);
    
    
}
 
int main(){
    
//    char str[] = "(1,(2,3),(4,(5,6)7))";
//    char str[] = "((1,(2,3),(4,(5,6)7))";
//    char str[] = "(1,(2,3)),(4,(5,6)7))";
//    char str[] = "(1,(21,33)3,(4,(5,6)7))";
    char str[] = "(1,(2,3),(43,(15,63)17))";
    
    remove_inline_brackets(str);
 
}
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值