删除重复字符

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:

输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:

输出去重排序后的结果字符串。

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C程序如下:

#include 
#include 

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;
}

你可能感兴趣的:(c语言,算法)