括号的匹配
最简单的版本
只有一个小括号
题目
问题描述:
任意给定一个字符串,字符串中包含除了空格、换行符之外的任意字符。你的任务是检测字符串中的小括号是否配对,即“(”与“)”是否配对。如字符串“((a+b*(c+d))”中小括号是配对的,而“((a+b)*)c+d))”则不配对。
输入与输出要求:
输入一个长度不超过100的非空字符串,该字符串中不会出现空格、换行符。输出检测结果。
程序运行效果:
Sample 1:
((a+b)*(c+d)) ↙
parentheses match!↙
Sample 2:
((a+b)*)c+d)) ↙
parentheses do not match!↙
代码
//循环中不断的条件判断,简单的想法
#include <stdio.h>
int main()
{
char A[1000],c1=0,c2=0,ret=0;
gets(A);
for(int i=0; A[i] !='\0';i++)
{
if(A[i]=='(')
{
c1++;
}
if(c1<0)
{
printf("parentheses do not match!");
return 0;
}
if(A[i]==')')
{
c1--;
}
}
if(c1==0)
{
printf("parentheses match!");
}
else
{
printf("parentheses do not match!");
}
return 0;
}
心得体会
1.首先的想法是对左右括号进行计数,突然觉得没有这么简单,于是上网一搜,都是复杂的版本,造成思路的混乱,还是没研究通,后续再补上。
2.核心就是对括号计数,保证c1>=0,c1 就是左括号数-右括号数,在每轮循环中检查 , 就能确定左右括号的出现的顺序
if(c1<0)
{
printf("parentheses do not match!");
return 0;
}
3.还要注意遇到不符的条件就结束的情况