您的位置:首页 > 编程语言 > C语言/C++

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

2016-07-07 14:15 357 查看

题目要求

编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。

注意:你不必担心注释内部、字符串常量内部和字符常量形式的花括号。

算法总结

判断左右花括号是否成对出现需要两个条件:

1.左右花括号数目必须相等.

2.当右花括号出现时,左花括号数目必须大于右花括号.

具体分析,请看C语言::验证花括号成对出现

基础版

#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%的人都能写出这样的代码.

扩展阅读

scanf()函数功能、原型、用法和实例
getchar()函数功能、原型、用法及实例
gets()函数功能、原型、用法及实例
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言