描述
给定一个字符串str和两个字符a,b,将str中ASCII码处于a,b之间(含a b)的字符按ASCII码从大到小排序,其他字符位置不变.输出排序后的字符串。
输入
输入只有两行:
第一行给出一个字符串str
第二行给出两个字符a,b,以一个空格间隔
字符串长度不大于3000。
输出
输出只有一行,给出排序后的字符串。
样例输入
How many constest will be held during 2010 ?
0 9
0 9
样例输出
How many constest will be held during 2100 ?
#include<iostream>
#include<string>
using namespace std;
int main(){
string str;
char a,b;
struct s{char value;int lead;}temp[3000];
int i,len,j,sum;
getline(cin,str);
len=str.length();
scanf("%c %c",&a,&b);
for(i=0,j=0;i<len;i++){
if(str[i]>=a && str[i]<=b){
temp[j].value=str[i];
temp[j].lead=i;
j++;
}
}
sum=j;
for(j=0;j<sum;j++){
for(i=0;i<sum-j-1;i++){
if(temp[i].value<temp[i+1].value)
swap(temp[i].value,temp[i+1].value);
}
}
for(i=0;i<sum;i++)
str[temp[i].lead]=temp[i].value;
cout<<str<<endl;
return 0;
}