HJ26 字符串排序
题目:https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584?tpId=37&tqId=21249&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
如果非字母,就记录一下符号和该符号的位置。
如果是字母,对于条件一,就整理成都是大写或者都是小写再比较就可以;
对于条件二,stable_sort()就可以控制相同情况下顺序不变。
然后输出注意一下就行。
喝了死咖啡烦死了……………………脑子跟浆糊一样,脑和手好像分家了,以后不想喝了。讨厌。
两点了,睡觉去了不写了,明早还要考美团第二场
1 #include<bits/stdc++.h> 2 using namespace std; 3 char s[1010],s1[1010]; 4 int n,num_fzm=0,n1=0,cnt=0,cnt_zm,cnt_fzm; 5 struct FZM{ 6 char c; 7 int id; 8 }fzm[1010]; 9 bool cmp(const char&a,const char&b){ 10 int c=0,d=0; 11 if(a>='A'&&a<='Z') c=a-'A'+'a'; 12 else c=(int)a; 13 if(b>='A'&&b<='Z') d=b-'A'+'a'; 14 else d=(int)b; 15 return c<d; 16 } 17 void init(){ 18 cin.getline(s,1001); 19 n=strlen(s); 20 for(int i=0;i<n;i++){ 21 if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){ 22 s1[n1++]=s[i]; 23 } 24 else{ 25 fzm[++num_fzm].c=s[i]; 26 fzm[num_fzm].id=i; 27 } 28 } 29 stable_sort(s1,s1+n1,cmp); 30 return; 31 } 32 void Output(){ 33 int cnts1=0; 34 for(int i=1;i<=num_fzm;i++){ 35 int t; 36 if(i==1)t=fzm[i].id; 37 else t=fzm[i].id-fzm[i-1].id-1; 38 cnt=0; 39 while(cnt<t)printf("%c",s1[cnts1++]),cnt++; 40 printf("%c",fzm[i].c); 41 } 42 while(cnts1<n1)printf("%c",s1[cnts1++]); 43 return; 44 } 45 int main(){ 46 init(); 47 Output(); 48 return 0; 49 }