本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
C程序如下:
#include <stdio.h>
#include <string.h>int main(void)
{char a[81];gets(a);//输入这个字符串int n = strlen(a);for(int i = 1; i <= n - 1; i++)//先对字符串进行排序,冒泡排序{for(int j = 0; j < n - i; j++){if(a[j] > a[j + 1])//a[j]和a[j+1]对应的是字符的ASCLL码值{char temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}char *p = a;//指向非重复字符,若是重复字符就跳过char *left = a, *right = a;//定义两个指针,分别指向a中的第一个元素while(*right != '\0')//遍历这个字符串{//为什么是right不等于‘\0’呢,因为right先向右指while(*left == *right)//比较这个字符与下一个字符是否相等{right ++;//跳过相同的字符}*p++ = *left;//p指向字符不相同的数,随后加一指向下一个字符left = right;//left指向非重复字符}//此方法是在原字符串的基础上进行删除的,改变了原字符串*p = '\0';//别忘了最后加一个‘\0’,字符串都是以‘\0’为结尾的printf("%s", a);return 0;
}