任意给定一个字符串,字符串中包含除了空白符、换行符之外的任意字符。你的任务是检测字符串中的圆括号是否配对,即“(”与“)”是否配对。如字符串“((a+b)* (c+d))”中是配对的,而“((a+b)*) c+d))”则不配对。
输入格式:
一个长度不超过100的非空字符串,该字符串中不会出现空格、换行符。
输出格式:
匹配及不匹配见样例。
输入样例一:
((a+b)*(c+d))
输出样例一:
parentheses match!
输入样例二:
((a+b)*)c+d))
输出样例二:
parentheses do not match!
代码如下:
#include<stdio.h>
int main()
{
int count1 = 0, count2 = 0;
int f1 = 0, f2 = 0;
int i = 0;
char a[100] = { 0 };
char* ac = &a;
scanf("%s", a);
while (*ac != 0)
{
if (*ac == '(')
count1++;
else if (*ac == ')')
count2++;
ac++;
}
for (i = 0; a[i] != 0; i++)
{
if (a[i] == '(')
{
f1 = i;
break;
}
}
for (i = 0; a[i] != 0; i++)
{
if (a[i] == ')')
{
f2 = i;
break;
}
}
//注意)(也是不匹配的,所以也要注意方向
if (f2 < f1)
{
printf("parentheses do not match!");
return 0;
}
if (count1 == count2)
printf("parentheses match!\n");
else
printf("parentheses do not match!\n");
return 0;
}
除了左右括号的个数,方向也要注意