本题要求编写程序,将给定字符串去掉重复的字符后,按照字符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;
}