Bootstrap

C语言解决去重问题

C语言通过 指针方式解决字符串去重问题的 三种方法

方法一:双指针方式

这种方法是最容易想到,但也是最复杂的

    char ch[100];
    scanf("%[^\n]",ch);
    char *p=ch,*q=ch+1;
    while (*p)
    {
        while (*q)
        {
            if(*p==*q){//当检测到p指针指向的内容和q指针指向的内容相等时,执行下方代码
                char *t=q;
                while (*t)
                {
                    *t=*(t+1);
                    t++;
                }
                continue;
            }
            q++;
        }
        p++;
        q=p+1;//将q的地址重新回到p的下一个
    }
    puts(ch);

方法二:通过变量的方式移动指针

这种方法的优点是利用了strcpy()函数,省略了利用循环将数组往前推的过程。

	  char ch[50];
    scanf("%[^\n]",ch);
    char *p=ch;
    for (int i = 0; *(p+i); i++)
    {
        for (int j = i+1; *(p+j+1); j++)
        {
            if(*(p+i)==*(p+j)){
                strcpy(p+j,p+j+1);
                j--;
            }
        }
    }
    puts(ch);

方法三:从后向前逐个替换相同字符,此方法最为简单

原理即是从后向前寻找相同字符,若是找到相同的,则会将后面的字符逐个向前替换前方字符,直到当前字符位置才停止

char ch[50],*p=ch;
    gets(ch);
    for (int i = 0; i<strlen(ch); i++)
    {
        for (int j = strlen(ch)-1; j>i; j--)
        {
            if(*(p+i)==*(p+j)){
                *(p+j)=*(p+j+1);
            }
        }
    }
    puts(ch);
;