题解 | #字符串排序#
字符串排序
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; }
本质在于筛,排,比
筛选出字母,对字母按照规则进行稳定排序,对比原数组的数据输出