AlenaNuna

导航

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 }

 

posted on 2024-09-07 02:01  AlenaNuna  阅读(5)  评论(0编辑  收藏  举报