【十二题解】 | #字符串排序#取了个巧

字符串排序

http://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

设置number数组,0-25代表a-z,26-52代表A-Z遍历数据,有字母,相应位置加一

设置sort数组,0-25代表a-z(不分大小写),当number进入小写字母时候,sort相应位置乘以10并且加1,当进入大写字母时,sort相应位置乘以10并加2(例如sort[0]=1211)那就说明a的顺序应该是aAaa(其中下标0代表是字母a,1211分别代表大小写)

#include<stdio.h>

int main(){

char data[1000]={0};
scanf("%[^\n]", data);
int numbers[52]={0};
long long sort[26]={0};
for(int i=0; data[i] != '\0'; i++){
    if(data[i]>='a' && data[i]<='z'){
        numbers[data[i]-'a']++;
        sort[data[i]-'a']=sort[data[i]-'a']*10+1;
    }
    if(data[i]>='A' && data[i]<='Z'){
        numbers[data[i]-'A'+26]++;
        sort[data[i]-'A']=sort[data[i]-'A']*10+2;
    }
}
    for(int i=0; data[i] != '\0'; i++){
        if(data[i]>='a' && data[i]<='z' || data[i]>='A' && data[i]<='Z'){
            int x=0;
            for(x=0; numbers[x]+numbers[x+26]==0; x++);
            long long so = sort[x];
            int bit = 0;
            while(so>10){
                so/=10;
                bit++;
            }
            if(bit){
                long long all=1;
            while(bit){
                all*=10;
                bit--;
            }
            sort[x]%=all;
            }
            else{
                sort[x]=0;
            }
            
            if(so==1){
                numbers[x]--;
                printf("%c", x+'a');
            }
            else{
                numbers[x+26]--;
                printf("%c", x+'A');
            }
        }
        else{
            printf("%c", data[i]);
        }
    }

}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务