现有一串字符串,请对字符串中的数字字符按照升序排序,其他非数字字符存储位置保持不变,将结果保存至output数组中。
【注:字母可能包含大写、小写字母、数字以及控制字符】
要求实现函数my_sort(char input[],char output[])
例子:
input:a3vues4sdf2kjk9df0v
output:a0vues2sdf3kjk4df9v
#include <iostream> #include <algorithm> #include <string> using namespace std; #define MAX_SIZE 1024 typedef struct { char a; int b; }Table; void my_sort(char input[],char output[]) { int n=strlen(input); Table table[MAX_SIZE]; int value[MAX_SIZE]; int num[MAX_SIZE]; int c=0; int t=0; for (int i=0;i<n;i++) { table[i].a=input[i]; table[i].b=i; } for (int j=0;j<n;j++) { if (input[j]<='9'&&input[j]>='0') { value[c]=(int)input[j]; num[c]=j; c++; } } for (j=0;j<c;j++) { for (i=1;i<c-j;i++) { if (value[i]<value[i-1]) { t=value[i]; value[i]=value[i-1]; value[i-1]=t; } } } for(int l=0;l<c;l++) { for (int k=0;k<n;k++) { if (table[k].b==num[l]) { table[k].a=value[l]; } } } for (int k=0;k<n;k++) { output[k]=table[k].a; } } int main() { // char input[MAX_SIZE]=""; // gets(input); char input[]="a3vues4sdf2kjk9df0v"; char output[MAX_SIZE]=""; my_sort(input,output); int m=strlen(output); for (int i=0;i<m;i++) { cout<<output[i]; } return 0; }
注:
1 思路很简单,大概就是先把数字提出来,然后保存对应的序号,序号已经是排好的,然后对提出的数字进行排序,然后把排序号的数字,从小到大插值到上面保存的序号中
2 很少用到结构体,所以在这里定义了一个结构体来用,其实不用也可以