/*
现有一串字符串,请对字符串中的数字字符按照升序排序,
其他非数字字符存储位置保持不变,将结果保存至output数组中。
【注:字母可能包含大写、小写字母、数字以及控制字符】
要求实现函数my_sort(char input[],char output[])
例子:
input:a3vues4sdf2kjk9df0v
output:a0vues2sdf3kjk4df9v
*/
#include<iostream>
#include<string.h>
using namespace std;
/***********************************************************************/
void mysort(char input[], char output[])
{
int m = strlen(input),i=0;
int *location = new int [m];
int *digital = new int [m];
int digital_count = 0;
int tmp = 0;
//记录出现数字的位置,并且将数字集中到digital[]数组中
for(i=0; i<m; i++)
{
if(input[i]>='0' && input[i]<='9')
{
location[digital_count] = i;
digital[digital_count] = input[i] - '0';
digital_count++;
}
output[i] = input[i];
}
//使用冒泡排序
for(i=1; i<digital_count; i++)
{
for(int j=i; j>0; j--)
{
if(digital[j] < digital[j-1])
{
tmp = digital[j];
digital[j] = digital[j-1];
digital[j-1] = tmp;
}
}
}
//将排好序的数组插入到output当中
for(i=0; i<digital_count; i++)
{
output[location[i]] = digital[i] + '0';
}
output[m] = '\0';//手工加上字符数组结束标志,因为字符数组不会自动在末尾加上结束符;
delete [] location;
delete [] digital;
}
void test1()
{
int index = 0;
char input[] = "u8x9@0ab7yu2";
char *output = new char[strlen(input)+1];
mysort(input,output);
while(output[index] != '\0')
{
cout << output[index++];
}
cout << endl;
delete [] output;
}
/***********************************************************************/
struct node
{
char c;//记录数字字符
int index;// 记录字符下标 以便回填
};
void BubbleSort(node a[],int size);
void my_sort(char input[],char output[]);
int main()
{
char *a = "a3vues4sdf2kjk9df0v"; //此处也可由用户输入
char *b = new char[strlen(a)+1];
if(!b)
{
return -1;//内存分配检查
}
my_sort(a,b);
cout<<a<<endl<<b<<endl;
delete b;
b = NULL;
cout<<"------------------------------------------"<<endl;
test1();
}
void my_sort(char* input,char* output)
{
int size = 0;//统计数字字符个数
int i = 0;
int j = 0;
if(!input || !output)
{
return;
}
for(i=0;input[i]!='\0';i++)
{
output[i] = input[i];
if(input[i]>='0'&& input[i]<='9')
{
size++;
}
}
output[i] = '\0';
node* temp = new node[size];
if(!temp)
{
return;
} //内存分配检查
for(j=0,i=0;input[i]!='\0';i++)
{
if(input[i]>='0'&& input[i]<='9')
{
temp[j].c = input[i];
temp[j].index = i;
j++;
}
}
BubbleSort(temp,size);
for(i=0;i<size;i++)
{
output[temp[i].index] = temp[i].c;
}
delete temp;
temp = NULL;
}
void BubbleSort(node a[],int size)
{
for(int i=0;i<size-1;++i)
{
for(int j=i+1;j<size;++j)
{
if(a[i].c > a[j].c)
{
char c = a[i].c;
a[i].c = a[j].c;
a[j].c = c;
}
}
}
}
华为:现有一串字符串,请对字符串中的数字字符按照升序排序,其他非数字字符存储位置保持不变,将结果保存至output数组中
最新推荐文章于 2022-07-29 11:18:50 发布