排排序

来源:互联网 发布:7001端口 编辑:程序博客网 时间:2024/04/27 14:31

FJNU.1902

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 .

My Program

#include<stdio.h>
#include
<string.h>
void paixu(char instr[])
{
  
int i,j;char temp;
  
for(i=0;instr[i];i++)
    
for(j=i;instr[j];j++)
      
if(instr[i]>instr[j])
        
{
          temp
=instr[i];
          instr[i]
=instr[j];
          instr[j]
=temp;
        }

}

int main()
{
  
char str[30000],a,b,instr[30000],temp;
  
int i,j;
  gets(str);
  scanf(
"%c %c",&a,&b);
  
if(a>b) {temp=a;a=b;b=temp;}
  
for(i=0,j=0;str[i];i++)
    
if((str[i]>=a)&&(str[i]<=b)) instr[j++]=str[i];
  paixu(instr);
  
for(i=0,j=0;instr[i];j++)
    
if((str[j]>=a)&&(str[j]<=b)) str[j]=instr[i++];
  printf(
"%s ",str);
      return 0;
}

YOYO's Note:
 先把所有在a,b间的字符单独存在某数组中进行排序,
然后再找一次在a,b间的字符按顺序替换为排序好的字符……