字元判斷

萬里無雲便是我發表於2017-04-07

問題:
描述
現在,有一行括號序列,請你檢查這行括號是否配對。
輸入
第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,
每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),
測試資料組數少於5組。資料保證S中只含有"[","]","(",")"四種字元
輸出
每組輸入資料的輸出佔一行,如果該字串中所含的括號是配對的,則輸出Yes,如果不配對則輸出No
樣例輸入
3
[(])
(])
([[]()])
樣例輸出
No
No
Yes
Yes

程式碼:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int n,i;
	scanf("%d",&n);
	int ds,df,flag;
	while(n--)
	{
		char *str=(char*)malloc(10005);
		scanf("%s",str);
		ds=0;
		df=0;
		flag=0;
		if(strlen(str)%2!=0){
			printf("No\n");
			free(str);
			continue;
		}else
		{
			for(i=0;i<=strlen(str);i++){
				if(str[i]=='(')
				ds++;
					if(str[i]==')')
				ds--;
				if(str[i]=='[')
				df++;
					if(str[i]==']')
				df--;
				if((str[i]=='('&&str[i+1]==']')||(str[i]=='['&&str[i+1]==')'))
			{
			printf("No\n");
			free(str);
			flag=1;
			break;
			}
		}
			if(flag)	
			continue;
			if(ds!=0||df!=0)
					{
							printf("No\n");
							free(str);
						 continue;
					}
			  else
						{
								printf("Yes\n");
								free(str);
						}

			
		}

	}
	
	return 0;
}

總結:

字串判斷的時候使用字元指標,這樣可以變換為字元陣列進行單個字元的判斷





問題:

/*
描述
輸入三個字元(可以重複)後,按各字元的ASCII碼從小到大的順序輸出這三個字元。
輸入
第一行輸入一個數N,表示有N組測試資料。
後面的N行輸入多組資料,每組輸入資料都是佔一行,有三個字元組成,之間無空格。
輸出
對於每組輸入資料,輸出一行,字元中間用一個空格分開。
樣例輸入
3
qwe
asd
zxc
樣例輸出
e q w
a d s
c x z
*/




程式碼:

*/

#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
	int i;
	char a,b,c,t;
	scanf("%d",&i);
	getchar();//只適用於c,吃掉回車 
	while(i--)
	{
	 scanf("%c%c%c",&a,&b,&c);
		getchar();
		/*輸入別的資料時,肯定是按回車結束的,而回車實際上輸入了兩個字元, 
		為了防止別的語句讀到這個'\n',需要用一個getchar()先把它讀走。*/
		if(a>b)
		{
			t=a;a=b;b=t;
		}
		if(a>c)
		{
			t=a;a=c;c=t;
		}
		if(b>c)
		{
			t=b;b=c;c=t;
		}
	 printf("%c %c %c\n",a,b,c);	
	}
	return 0;
}
 /*
#include "stdio.h"
main()
{
char a,b,c,d;
int i;
scanf("%d",&i);
getchar();
while(i--)
{
scanf("%c%c%c",&a,&b,&c);
getchar();
if (a>b) {d=a;a=b;b=d;}
if (a>c) {d=a;a=c;c=d;}
if (b>c) {d=b;b=c;c=d;}
printf("%c %c %c\n",a,b,c);		
}
}
  
  */
  


總結:

注意getchar()的用法。

相關文章