题目:
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
解:
#include<stdio.h>
int main(){
int i,j;
char ch,a[100];
gets(a);
int len=strlen(a);
for(i=0;i<len;i++){//先排序
int k=i;//用k表示i,不改变外层循环
for(j=i+1;j<len;j++){
if(a[k]>a[j]){//交换
ch=a[k];
a[k]=a[j];
a[j]=ch;
}
}
}
for(i=0;i<len;i++){
if(a[i]==a[i+1]){
for(j=i;j<len;j++){//如果出现重复,数组整体前移一个单位
a[j]=a[j+1];
}
len--;
i--;//很关键。i必须重新回到之前的位置再比较。
}
}
printf("%s",a);
return 0;
}
有人先去重,再排序,但感觉代码量要大一点。我先排序,这样重复的字符都在一起,去重只需要前后比较即可,简单点。