现在的位置: 首页 > 综合 > 正文

2012华为编程比赛之字符串数字字符排序

2014年10月25日 ⁄ 综合 ⁄ 共 1113字 ⁄ 字号 评论关闭

现有一串字符串,请对字符串中的数字字符按照升序排序,其他非数字字符存储位置保持不变,将结果保存至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 很少用到结构体,所以在这里定义了一个结构体来用,其实不用也可以

抱歉!评论已关闭.