字符串去重

1、用C语言写

方法一:

分析:给一个十个字符的字符串aabbccddee。第一个字符依次跟后面的字符比较,如果有相等的就删除。然后再从第二个字符开始,用第二个字符依次跟后面的比较,如果有相等的就删除。依次类推,需要循环总字符长度-1次。删除用后位前移处理,最后空出的一位就置\0。当遇到有相等的字符,就从相等的那个字符位置开始做后位前移操作。

关键:这个主要思路就是从左开始指定字符,依次与后面的比较,实现后面无相同的字符。

  代码如下:

#include "stdio.h"
#include "string.h"
void main()
{
    char a[100];
    int i,len,k,j;
    printf("请输入字符串:");
    scanf("%s",a);
    i = 0;
    len = strlen(a);
    while(i<len-1)
    {
        j = i+1;
        while(j<len)    //第i个位置的值依次跟后面的值比较
        {
            if (a[i] == a[j])    //如果相等,从第j的位置开始后位前移
            {
                k = j;
                while(k<len-1)
                {
                    a[k] = a[k+1];    //执行后位前移
                    k += 1;
                }
                a[len-1] ='\0';    //最后留出的空位置\0
                len -= 1;
                j -= 1;    //由于第j的位置出现新值,内while需要重新从j开始比较
            }
            j += 1;
        }
        i += 1;
    }
    printf("%s",a);
}

方法二:

  分析:把要去重的字符串分成两部分,一部分是没有重复的,另一部分是有重复的,先确定第一个字符是未重复部分,然后把第二个字符与第一个比较,相同就执行后位前移操作,如果不同,就把第二个字符也放进未重复部分,然后再第三个字符跟未重复部分进行比较,重复同样的操作,最后实现所有字符串的比较。

  关键:这个思路主要是先把第一个看成是未重复的一部分,然后用后面的依次跟前面的比较,不相同就放到没有重复的部分,保证比完的都是没有重复的字符,然后拿还没有比的字符依次跟未重复部分比较。

  代码如下:

#include "stdio.h"
#include "string.h"
void main()
{
    char a[100];
    int i,len,k,j;
    printf("请输入字符串:");
    scanf("%s",a);
    i = 1;
    len = strlen(a);
    while(i<len)
    {
        j = 0;    
        while(j<i)    //第i个位置的值依次跟前面的比较
        {
            if (a[j] == a[i])    //如果相等,从第i个位置开始后位前移
            {
                k = i;
                while(k<len-1)
                {
                    a[k] = a[k+1];    //执行后位前移
                    k += 1;
                }
                a[len-1] = '\0';    //最后留出的空位置\0
                len -= 1;
                i -= 1;    //第i的位置值已经替换,外while需要再次从i的位置循环
                break;    //终止本次while循环比较
            }
            j += 1;
        }
        i += 1;
    }
    printf("%s",a);
}

 

转载于:https://www.cnblogs.com/thoughtful-actors/p/9494967.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值