• ACM_小凯的排序(字符串)


    小凯的排序

    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,'',sizeof(obj));
     9         for(int i=0;str[i]!='';++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]!='';++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 }
  • 相关阅读:
    【题解】B进制星球
    高斯消元
    7.16
    题解 P1572 【计算分数】
    7.30
    7.31
    项目中使用 MyBatis(一)
    从整体上了解Spring MVC
    Spring注解
    Spring IOC 和 DI
  • 原文地址:https://www.cnblogs.com/acgoto/p/9226633.html
Copyright © 2020-2023  润新知