Source:

#include<iostream>
using namespace std;

char s[30001];
char a,b;
int L;
struct Node

...{
char c;
int n;
};

Node c[30001];
int m;

void init()

...{
int i,k=1;
for(i=0;i<L;i++)

...{
if((a<=b&&s[i]>=a&&s[i]<=b) || (a>b&&s[i]>=b&&s[i]<=a))

...{
c[k].c=s[i];
c[k].n=i;
k++;
m++;
}
}
}

void sort()

...{
int i,j;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)

...{
if(c[i].c<c[j].c)

...{
char t;
t=c[i].c;
c[i].c=c[j].c;
c[j].c=t;
}
}
}

void input()

...{
int i;
for(i=1;i<=m;i++)

...{
s[c[i].n]=c[i].c;
}
}

int main()

...{
// freopen("fjnu_1902.in","r",stdin);
gets(s);
scanf("%c %c",&a,&b);
L=strlen(s);
init();
sort();
input();
cout<<s<<endl;
}

Description
给定一个字符串str,和两个字符a,b,将str中ASCII码处于a,b之间(含a b)的字符按ASCII码从小到大排序,其他字符位置不变.输出排序的字符串
Input
输入只有两行
第一行给出一个字符串str
第二行给出两个字符a,b,以一个空格间隔.
字符串长度小于30000
Output
Sample Input
FJNU contest 1062 for xi'an 2006 .
0 9
Sample Output
FJNU contest 0001 for xi'an 2266 .
Hint
原字符串 FJNU contest 1062 for xi'an 2006 . 中处于'0'与'9'之间的字符有
1062 2006
1 0 6 2 2 0 0 6
将之排序后为 0 0 0 1 2 2 6 6
0001 2266
其余字符不变,于是新字符串为
FJNU contest 0001 for xi'an 2266 .
KEY:把a,b之间的全部取出来放到结构体里面,进行排序;