删除字符串中的重复字符

题目:

实现将字符串中的重复字符删除并且输出。

例如:

删除前字符串:aaabbbcccddd

删除后字符串:abcd

解题思路:

删除字符串中的重复字符有两个需要思考的点,第一个是怎么判断一个字符是重复字符,第二个是该如何对这个重复字符进行删除。

我的思路是,将原字符串存储到字符数组a中,进行删除后的字符串存储到字符数组b中。首先我先将字符数组a中的第一个字符取出,判断其是否在字符数组b中。因为我将字符数组b初始化为空,所以a中的第一个字符肯定不在b中,那么就将该元素赋值到b中。

接下来,重复上述操作,如果a中的字符在b中,说明之前已经把该字符赋给b一次了(即这个字符在a中已经是重复的字符了),那么就不进行赋值操作。如果a中的字符不在b中,那么就将该字符赋值到b中。

程序代码:

#include <stdio.h>
void del_fun(char *,char *);
int main(int argc, char *argv[])
{ 
    char a[50];//存储删除前的字符串
    char b[50] = {'\0'};//存储删除后的字符串
    puts("请输入一串字符串:");
    gets(a);
    puts("删除重复字符后的字符串:");
    del_fun(a,b);
    puts(b);
    return 0;
} 
void del_fun(char *p,char *q)
{
    int i = 0, j = 0, k = 0;
    char t;
    do{
        t = p[i];//将字符串中第一个元素取出
        for(j = 0; q[j] != '\0'; j++){
            if(q[j] == t){//当字符串中的元素是被数组b存储过的元素时,提前结束for循环
                break;
            }
        }
        if(q[j] == '\0'){//这个条件是当上面for循环是正常结束时得到的,证明t没有被b数组存储过
            q[k] = t;
            k++;
        }
        i++;
    }while(p[i] != '\0');//直到p[i] == '\0',证明将原来的字符串遍历结束了
    q[k] ='\0';//字符串以'\0'结束
}

运行结果:

请输入一串字符串:
aaabbbcccddd
删除重复字符后的字符串:
acd
请输入一串字符串:
asdasdasd
删除重复字符后的字符串:
asd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值