标题:求助 压缩的算法问题
只看楼主
sun004715
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-10-30
结帖率:100%
已结贴  问题点数:10 回复次数:8 
求助 压缩的算法问题
编写两个函数, 分别实现如下简单压缩算法的压缩和解压。 如:0x11,0x11,0x11,0x22,0x22,0x33  解压后变为 0x11,0x03, 0x22, 0x02, 0x33,0x01.
 能帮忙编写一下这两个函数 我参考下吗?
这是我编写的函数  不能正确得出结果  能帮忙找下错吗?
char *reduce(char *str)
{
    int len = 0;
    char *new = (char *)malloc((int)strlen(str)+1);
    char *result = new;
    char *temp = str;
    while (*str != '\0')
    {
        if (*str != *(++temp))
        {
            *new++ = *str++;
            len++;
            *new++ = len;
        }
        else
        {
            len++;
        }
    }
    *new = '\0';
    return result;
}

char *increase(char *str, int num)
{
    if (str == NULL)
        return NULL;
    char *new = (char *)malloc(strlen(str)+num);
    char *result = new;
    int i=0;
    int j;
    while (*str != '\0')
    {
        if (0 == (i%2))
        {
            for (j=0; j<str[i+1]; j++)
            {
                *new++ = str[i];
            }
        }
        i += 2;
    }
    *new = '\0';
    return result;
}

[ 本帖最后由 sun004715 于 2010-11-28 17:00 编辑 ]
搜索更多相关主题的帖子: 算法 压缩 
2010-11-27 23:07
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
得分:3 
程序代码:
#include<stdio.h>

char* reduce(char*);

int
main(void)
{
      char s[]={0x11,0x11,0x11,0x22,0x22,0x33};
      char* p;
      int i=0;

      p=reduce(s);
      for(i=0;i<sizeof(s);i++)
            printf("%x ",*(p+i));
      getch();
      return 0;
}

char *
reduce(char *str)
{
    int len = 0;
    char *newp = (char *)malloc((int)strlen(str)+1);
    char *result = newp;
    char *temp = str;
    while (*str != '\0')
    {
        if (*str != *(++temp))
        {
            *newp++ = *str;
            len++;
            *newp++ = len;
            str+=len;
            len=0;
        }
        else
        {
            len++;
        }
    }
    *newp = '\0';
    return result;
}
压缩部分,解压应该差不多吧,没看了
2010-11-28 17:45
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
你的数据挺规则的哦,

[ 本帖最后由 BlueGuy 于 2010-11-28 17:55 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-11-28 17:53
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
你的描述有点问题,
应该是把0x11,0x11,0x11,0x22,0x22,0x33  压缩为 0x11,0x03, 0x22, 0x02, 0x33,0x01
然后再把 0x11,0x03, 0x22, 0x02, 0x33,0x01 解压为 0x11,0x11,0x11,0x22,0x22,0x33

我就是真命天子,顺我者生,逆我者死!
2010-11-28 18:25
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:7 
..

[ 本帖最后由 BlueGuy 于 2010-12-10 06:37 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2010-11-29 09:29
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
这题面试几率很高,

我就是真命天子,顺我者生,逆我者死!
2010-11-29 09:35
sun004715
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-10-30
得分:0 
回复 6楼 BlueGuy
很不幸 我面试遇到这道题了  没做对  谢谢
2010-11-29 14:50
sun004715
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-10-30
得分:0 
回复 5楼 BlueGuy
我在最后加了
 for(i=0; i<sizeof(packed); i++)
        printf("%x   ", packed[i]);
为什么打印出来  11   3   22   2   33   1   ffffffff   40   11   11   11   22   22   33   
1 后面是怎么打印出来的呢  packed[7] 总共才14个 字节  上面打印出来的也是14个字节吗? ffffffff这个不是 4个字节吗 ?  11 占两个字节吧?   能帮忙解答下吗
2010-11-29 19:07
freedgun
Rank: 5Rank: 5
等 级:职业侠客
帖 子:147
专家分:302
注 册:2010-11-11
得分:0 
强烈关注下

有什么样的付出,就有什么样的收获!!
2010-11-29 19:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-327122-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028306 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved