本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
结尾无空行
输出样例:
23adefijnvz
结尾无空行
作者
颜晖
单位
浙大城市学院
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
C (gcc)
#include <stdio.h>
int main(void) //如果不需要从命令行中获取参数,请用int main(void);否则请用int main(int argc, char *argv[])
{
char a[80]; //"少于80个字符",即<=79。而'\n'占一个字符,所以a[80]。
int i;
for(i=0;i<80-1;i++){
scanf("%c",&a[i]); // &
if(a[i]=='\n'){
break;
}
}
// printf("i=%d\n",i);
int len=i; //得到输入字符串长度,不含'\n'。
int j,temp;
for(i=0;i<len;i++){
for(j=i+1;j<len;j++){ //先执行内循环,a[0]逐一与后面的a[1]~a[len-1]元素比较,经过调换使a[0]最小。
if(a[i]>a[j]){ //然后i++,a[1]逐一与后面的a[2]~a[len-1]元素比较,依此类推,使a数组从小到大排列。
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<len;i++){
if(a[i]!=a[i+1]) //23aaaddeffijnvzzz,若没有该if语句,输出如前。
printf("%c",a[i]); //23 a de fijnm z,
// printf(" %d, ",a[i]);
}
return 0;
}