题解 | #字符串排序#

字符串排序

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char arr[1001]={};
    char tmp[1001]={};
    //gets(arr);
    scanf("%[^\n]",arr);
    int len = strlen(arr);
    int j=0;
    //第一步,将所有的英文字符按照顺序摘出来
    for(int i=0;i<len;i++){
        if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z'))
            tmp[j++]=arr[i];
    }
    tmp[j]='\0';
    //第二步,对tmp中的英文字符按照给定规则找一个稳定排序算法排序
    for(int i=0;i<j-1;i++){
        for(int k=0;k<j-i-1;k++){
            char tmp1;
            char tmp2;
            if(tmp[k]>='a'&&tmp[k]<='z')tmp1=tmp[k]-'a';
            else tmp1=tmp[k]-'A';
            if(tmp[k+1]>='a'&&tmp[k+1]<='z')tmp2=tmp[k+1]-'a';
            else tmp2=tmp[k+1]-'A';
            if(tmp1>tmp2){
                char temp=tmp[k];
                tmp[k]=tmp[k+1];
                tmp[k+1]=temp;
            }
        }
    }
    //第三步,按照原表顺序进行遍历并输出
    for(int i=0,j=0;i<len;i++){
        if((arr[i]>='a'&&arr[i]<='z')||(arr[i]>='A'&&arr[i]<='Z')){
            printf("%c",tmp[j++]);
        }
        else{
            printf("%c",arr[i]);
        }
    }
    printf("\n");
    return 0;
}

本质在于筛,排,比

筛选出字母,对字母按照规则进行稳定排序,对比原数组的数据输出

全部评论

相关推荐

05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务