现有一串字符串,请对字符串中的数字字符按照升序排序,其他非数字字符存储位置保持不变,将结果保存至output数组中。
【注:字母可能包含大写、小写字母、数字以及控制字符】
要求实现函数my_sort(char input[],char output[])
例子:
input:a3vues4sdf2kjk9df0v
【注:字母可能包含大写、小写字母、数字以及控制字符】
要求实现函数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 很少用到结构体,所以在这里定义了一个结构体来用,其实不用也可以