C语言::验证花括号成对出现

这篇博客主要介绍了C语言中如何验证花括号的成对出现。内容涵盖题目要求,以及两种实现方法——基础版和优化版算法。此外,还提及了与输入处理相关的scanf(), getchar(), 和 gets()函数的功能、原型、使用方法和实例。" 106701523,8814872,Spring Boot与H2内存数据库快速入门,"['数据库', 'java', 'spring', 'spring boot']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目要求

编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。
注意:你不必担心注释内部、字符串常量内部和字符常量形式的花括号。

算法总结

判断左右花括号是否成对出现需要两个条件:
1.左右花括号数目必须相等.
2.当右花括号出现时,左花括号数目必须大于右花括号.

基础版

#include<stdio.h>
int main(){
    //定义一个整型变量用来接收控制台数据 
    int ch = 0;
    //定义一个整型变量用来计算左花括号数目 
    int left = 0;
    //定义一个整型变量用来计算右花括号数目 
    int right = 0;
    //提示信息 
    printf("请输入一段字符以ctrl+z结束:\n");
    //从控制台读入字符并判断是否满足循环条件。
    while((ch=getchar())!=EOF){
        //遇到左花括号,left+1 
        if(ch=='{'){
            left++; 
        }
        //遇到右花括号 
        if(ch=='}'){
            //左花括号数目大于右花括号数目right+1 
            if(left>right){
                right++;
            }else{
                //否则就是这种情况 
                //{{{{}}}}}{
                //}}}}}{{{{{
                //.....
                //直接退出程序 
                printf("不匹配!\n");
                return 0;
            }
        }
    }
    //如果程序能走到这里 
    //就已经排除}}}}{{{{这种特殊情况
    //如果左花括号数目等于右花括号数目 
    if(right==left){
        printf("匹配!\n");
    }else{
        printf("不匹配!\n");
    }
    return 0;
}

优化版

#include<stdio.h>
int main(){
    //定义一个整型变量用来接收控制台数据 
    int ch = 0;
    //定义一个整型变量用来记录左右花括号的状态 
    int count = 0; 
    //提示信息 
    printf("请输入一段字符以ctrl+z结束:\n");
    //从控制台读入字符并判断是否满足循环条件。
    while((ch=getchar())!=EOF){
        //遇到左花括号,count++ 
        if(ch=='{'){
            count++; 
        }
        //遇到右花括号 
        if(ch=='}'){
            //左花括号数目大于右花括号数目right+1 
            if(count>0){
                count--;
            }else{
                //否则就是这种情况 
                //{{{{}}}}}{
                //}}}}}{{{{{
                //.....
                //直接退出程序 
                printf("不匹配!\n");
                return 0;
            }
        }
    }
    //如果程序能走到这里 
    //就已经排除}}}}{{{{这种特殊情况
    //如果左花括号数目等于右花括号数目 
    if(count==0){
        printf("匹配!\n");
    }else{
        printf("不匹配!\n");
    }
    return 0;
} 
看完 C语言::验证花括号成对出现这篇文章,99%的人都能写出这样的代码.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值