字符串的压缩

题目:

对字符串进行压缩。

例如:

原字符串:aabccaddd

压缩后字符串:2ab2ca3d

解题思路:

这个题目关键点在于确定某个字符在字符串中出现的次数。

关于这一点,主要采用在指针遍历字符数组过程中,去判断当前指针指向的字符与下一个字符是否相同来实现的,如果相同则负责计数的count+1,并且记录对应字符。

然后是如何处理压缩后字符串的问题,最初我只是将字符和对应的个数都存储在了一个字符数组中,但这种存储方式在字符连续个数很多时,例如:aaaaaaaaaa压缩后为10a。对于这种个数不只一位的字符,其个数存储在字符数组中需要对不同的位进行拆解才行。

后面我改用了一个整型数组和一个字符型数组来分别存储字符个数和字符。以后可能会用到结构体的相关知识来试着对结果进行处理。

程序代码:

#include <stdio.h>
void zip_fun(char *);
int main(int argc, char *argv[])
{ 
    char a[50];
    puts("请输入想要进行压缩的字符串:");
    gets(a);
    puts("经过压缩后的字符串为:");
    zip_fun(a);
    return 0;
} 
void zip_fun(char a[])
{
    int count = 1, i = 0,j = 0;
    char b[50] = {'\0'};
    int c[50] = {0};
    char *p = a;
    while(*p != '\0')
    {
        while(*p == *(p+1)){
            count++;
            p++;
        }
        c[j] = count;
        j++;
        count = 1;

        b[i] = *p; 
        i++; 
        p++;        
    }
    for(i = 0; b[i] != '\0'; i++){
        if(c[i] != 1 && c[i] != 0)
        {
            printf("%d",c[i]);
        }
        printf("%c",b[i]);
    }
    putchar('\n');
}

运行结果:

请输入想要进行压缩的字符串:
aaaaaaaaaaaaaa
经过压缩后的字符串为:
14a
请输入想要进行压缩的字符串:
abcdef
经过压缩后的字符串为:
abcdef
请输入想要进行压缩的字符串:
aabccaab
经过压缩后的字符串为:
2ab2c2ab
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值