南邮 OJ 1181 字符排序

字符排序

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 826            测试通过 : 184 

比赛描述

给定一个字符串str和两个字符a,b,strASCII码处于a,b之间(a b)的字符按ASCII码从大到小排序,其他字符位置不变.输出排序后的字符串。

输入

输入只有两行:

第一行给出一个字符串str

第二行给出两个字符a,b,以一个空格间隔

 

字符串长度不大于 3000

输出

输出只有一行给出排序后的字符串。

样例输入

How many constest will be held during 2010 ?
0 9

样例输出

How many constest will be held during 2100 ?

提示

 

题目来源

李鸿斌(honghu)



#include<stdio.h>
#include<algorithm>
#define N 3000
using namespace std;

int main(){
	char str[3000],str2[3000],a,b;
	int idx[3000];
	int i,j,k,n;
	for(n=0;n<N;++n){
		scanf("%c",&str[n]);
		if(str[n]=='\0' || str[n]=='\n'){
			break;
		}
	}
	scanf("%c %c",&a,&b);
	if(a>b){
		a ^= b;
		b ^= a;
		a ^= b;
	}
	for(i=0,j=0;i<n;++i){
		if(str[i]>=a && str[i]<=b){
			str2[j] = str[i];
			idx[j++] = i;
		}
	}
	sort(str2,str2+j);
	for(k=0;k<j;++k){
		str[idx[k]] = str2[j-1-k];
	}
	for(i=0;i<n;++i){
		printf("%c",str[i]);
	}
	putchar('\n');
}






你可能感兴趣的:(ACM,字符排序,南邮OJ)