括号配对

知识:字符串接受结束后自动加'\0'。 使用scanf("%s",&s);函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止*/

scanf 不能读取回车和储存

scanf不能接受空格、制表符Tab、回车等; 而gets能够接受空格、制表符Tab和回车等;

scanf碰到缓冲区里面的空字符(空格,tab,回车,换行就会截断并添加\0),而gets是要等回车才截断字符串并添加\0的

比如 "hello world!" 字符串长度为12 (字符串存储时结尾自动加上\0字符) 如果这样写 "hello \0world!" 字符串长度为6 (空格也算一个字符)

 

sprintf(a,"%2.2s",a);中第一个2表示最终生成的字符串不超过2个字符,如果超出了最后一位用字符串结束符填充,,第二个2表示在后面的字符串中最多去2个字符,

 

用gets()函数输入字符串按回车后,回车符号不会被输入到字符串

 

 

 

 

现在,有一行括号序列,请你检查这行括号是否配对。

 
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No。
第一:配对的前提:字符个数必须为偶数个
第二:第一与  N配对
        第二与  N-1配对
        循环结束条件为 j-i==1
重点: 该问题先完全输入字符串后 再进行判断

# include<stdio.h>
# include<string.h>
int main()
{
int N,i,j,n,h,leap;
char s[10000],ch;
scanf("%d",&N);
ch =getchar();
for(i=1; i<=N ; i++)
{
gets(s);
n =strlen(s);

if(n % 2 == 1)
{printf("No");}
else
{
for(j=0,h=n-1;j+1==h; j++,h--)
{
if(s[j]==s[h])
leap = 1;
else
leap = 0;break;
}
if(leap == 1)
printf("Yes");
else
printf("No");
}
printf("\n");
}
return 0;
}

posted on 2016-10-29 11:32  qq77530202  阅读(210)  评论(0编辑  收藏  举报