实验7-3-9 删除重复字符 (20 分)
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
结尾无空行
输出样例:
23adefijnvz
#include<stdio.h>
#include<string.h>
void sort(char *a){//选择排序
int len=strlen(a);
for(int i=0;i<len-1;i++){
int k=i;
for(int j=i+1;j<len;j++){
if(a[k]>a[j])
k=j;
}
char t=a[i];
a[i]=a[k];
a[k]=t;
}
}
void delete(char *a){
char temp[80];//用于存放重复的j之后的字符串
int len=strlen(a);
for(int i=0;i<len-1;i++){
for(int j=i+1;a[j]!='\0';){//注意 判断条件不可以为len,因为如果当前j和i重复之后,j+1往前顶,此时还可能j+1=i的情况,因此不可直接
//j++,要continue判断当前新的j是否重复,如果不重复在执行j++,
if(a[i]==a[j]){
strcpy(temp,a+j+1);
strcpy(a+j,temp);//通过这两步实现了删除a[j],同时字符数组整体前移
strcpy(temp," ");//注意将temp即使清零
continue;
}
j++;
}
}
}
int main(){
char a[81];
gets(a);
delete(a);
sort(a);
printf("%s",a);
return 0;
}