题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
#include <stdio.h> #include <string.h> int main() { char str[1001]={0}; fgets(str,1001,stdin); int len = strlen(str); char sortStr[1001]={0}; //按照字母序提取字符 int sortNum=0; for(char i='A';i<='Z';i++) { for(int j=0;j<len;j++) { if(str[j] == i || str[j]-32 == i) { sortStr[sortNum++] = str[j]; } } } int j=0; for(int i=0;i<len;i++) { if(str[i]>='a'&& str[i]<='z' || str[i]>='A' && str[i]<='Z') { printf("%c",sortStr[j++]); }else{ printf("%c",str[i]); } } return 0; } //错误答案 冒泡排序法会改变相同元素之间下标的相对关系 // int a_Acompare(char a, char b) // { // if(a>='A' && a <='Z') a = a+('a'-'A'); // if(b>='A' && b <='Z') b = b+('a'-'A'); // if(a>b) return 1; // else if(a<b) return 0; // return 2; // } // int main() { // char str[1001]={0}; // fgets(str,1001,stdin); // int len = strlen(str); // char sortStr[len]; // char *p=str; // int charNum=0; // while(*p != '\n') // { // if(*p>='a'&& *p<='z' || *p>='A' && *p<='Z') // sortStr[charNum++] = *p; // p++; // } // char temp; // for(int i=0;i<charNum;i++) // { // for(int j=i+1;j<charNum;j++) // { // if(a_Acompare(sortStr[i],sortStr[j]) == 1) // { // temp = sortStr[i]; // sortStr[i] = sortStr[j]; // sortStr[j] = temp; // } // } // } // int j=0; // for(int i =0;i<len;i++) // { // if(str[i]>='a'&& str[i]<='z' || str[i]>='A' && str[i]<='Z') // { // printf("%c",sortStr[j++]); // }else{ // printf("%c",str[i]); // } // } // return 0; // }