1. 程式人生 > >ACM_小凱的排序(字符串)

ACM_小凱的排序(字符串)

desc 沒有 getch time style digi sort 水過 排序規則

小凱的排序

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

調皮的小凱喜歡排序,拿到什麽東西都要排一下序。現在他覺得單一的遞增遞減排序已經不能滿足他了,所以他要制定一個新的排序規則,規則如下:給定一個長度不超過100的字符串,裏面包括大寫字母、小寫字母、數字與其他英文標點符號(包括空格,但沒有回車),如果是大寫字母,就按照從Z到A降序來排,如果是小寫字母或數字,就按照從a到z或從0到9來排,其他字符則保留排序前與排序後各個位置對應的字符類型不變。如排序前是“M105cpICcaZ”,則排序後是“Z015acMIcpC”。

Input:

輸入包括多組數據,每組數據第一行為一個整數n(1<=n<=100),代表字符串的長度,接下來是一行字符串。

Output:

對於每組數據,輸出排序後的結果。

Sample Input:

11
M105cpICcaZ
18
#InClude <STDio.H>

Sample Output:

Z015acMIcpC
#TdSeiln <IHDou.C>
解題思路:簡單字符串處理,將大寫字母、小寫字母、數字各自排好序再依次填入對應符合類型的位置,最後再輸出一整串結果字符串,水過!
AC代碼:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=105;
 4 char ir[maxn],iu[maxn],id[maxn],str[maxn],obj[maxn];
5 int kr,ku,kd,n; 6 int main(){ 7 while(cin>>n){ 8 getchar();gets(str);kr=ku=kd=0;memset(obj,\0,sizeof(obj)); 9 for(int i=0;str[i]!=\0;++i){ 10 if(islower(str[i]))ir[kr++]=str[i];//ir數組存放小寫字母 11 if(isupper(str[i]))iu[ku++]=str[i];//iu數組存放大寫字母 12 if
(isdigit(str[i]))id[kd++]=str[i];//id數組存放數字 13 } 14 sort(ir,ir+kr);sort(iu,iu+ku);sort(id,id+kd);kr=kd=0; 15 for(int i=0;str[i]!=\0;++i){ 16 if(islower(str[i]))obj[i]=ir[kr++]; 17 else if(isupper(str[i]))obj[i]=iu[--ku]; 18 else if(isdigit(str[i]))obj[i]=id[kd++]; 19 else obj[i]=str[i]; 20 } 21 cout<<obj<<endl; 22 } 23 return 0; 24 }

ACM_小凱的排序(字符串)