题目要求
编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。
注意:你不必担心注释内部、字符串常量内部和字符常量形式的花括号。
算法总结
判断左右花括号是否成对出现需要两个条件:
1.左右花括号数目必须相等.
2.当右花括号出现时,左花括号数目必须大于右花括号.
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%的人都能写出这样的代码.