字符数组char A[n],如何用更小的空间存储这个字符数组?
请写出转换函数。

解决方案 »

  1.   

    struct CharArray{
        char c;
        int  length;
    };用 CharArray 结构做为数组的记号, 到用时, 在需要时, 再动态分配字符数组?
      

  2.   

    what mean?
    i can't understand!
      

  3.   

    struct CharArray{
        char* c;
        int  length;
    };
    是不是这个意思?
      

  4.   

    就是用一个函数,将字符数组char A[n](字符由a~z组成),用更小的空间存储。
    例如:将agasfghgerhdfhdfgh存储到更小的空间中。楼上兄弟realdreamer的意思,我也没能明白
      

  5.   

    一般而言,A[n]是占用n个字节,我不知道还怎么占更小的空间顶楼的回复不懂
      

  6.   

    用位操作可以做到
    用5个BIT可以表现一个字符,
    这样每个字符可以压缩3个BIT
      

  7.   

    可根据设置一个字符数组,
    初始化大小根据 n*5/8 取大于它的最小的整数
    用移位来进行存储,每次移5位
    然后加96即是原字符。存时减96
    因为a--97 ,01100001
        z--122,01111010
    所以只用后五位就可以区分了
      

  8.   

    前面的那位提到的,ASCII码也许是个突破口!让我猛共同来想一想1
      

  9.   

    不用啊,去掉前面的三个BIT
    后面就是1到26啊
    只在加或减96就可以了!以5个BIT为一个存储单位
    不过好像是会慢很多啊
      

  10.   

    借贵地问一个问题:
    如何知道一个已知项目的特点?是sdi的还是mdi的?在创建项目时最后一步说的很清楚,可是readme.txt中却没有?
      

  11.   

    不是表示上的问题,是多个字符压缩的问题吧?
    先出现的每出现一次给个代号,以后的字符只要是曾经出现过的,统统用代号表示即可。
    或者类似组合BCD码那样。
      

  12.   

    不是,我觉得是存储格式的问题,上述的ascII码的方法我觉得还是挺对路的
      

  13.   

    上面的5个Bits就可以存放的思路还可以!
    能够实现。
      

  14.   

    应该不是代号可以解决的
    a-z这么简单的字符找什么代号能比它本身好呢?
    如果从出现的次数着手的话,还要记录位置
    这样,对于N很大的情况是可行的,
    可以算算用这样的算法,在N大于多少时才能节省空间
    否则,不但不能节省,还需要更多的空间开销
      

  15.   

    struct Array
    {
      int char0:5;
      int char1:5;
      int char2:5;
      int char3:5;
      int char4:5;
      int char5:5;
      int empty:2;
    }
      

  16.   

    如果只是笔试题目,因该不会让你写很复杂的算法,hyflying() 说得就不错了,主要是对算法进行一些优化,代码写得整齐一些,添加必要的备注。我想应该没有问题的吧。
      

  17.   

    对啊,C语言可以以BIT为单位建立变量啊!int str[n]:5;  //不知这样行吗?
     
      

  18.   

    好像不对啊,
    以BIT为单位建立的变量长度也并不小于一个字符的长度啊,
    只是其它的位不可用吧,那样的话,还是不能节省空间
    我记不清了,去查查书吧
      

  19.   

    to hyflying() :
    上面的一个struct Array{}变量4字节,可以存6个字符.
    要不用huffmen编码
      

  20.   

    好象可以吧,26个字符都减'A',值在5bit表示就可以了,N个字符需要的大小是:n*5 + (n*5+3)/4个字节,第i个字符等于:(A[(i*5)/8]<<(i*5%8)) | ((i*5)%8 ? (A[(i*5)/8] & 1<<(i*5)%8 : 0))
      

  21.   

    好象可以吧,26个字符都减'A',值在5bit表示就可以了,N个字符需要的大小是:n*5/8+(n*5%8 ? 1 : 0)个字节,第i个字符等于:(A[(i*5)/8]<<(i*5%8)) | ((i*5)%8 ? (A[(i*5)/8] & 1<<((i*5)%8-1) : 0))
      

  22.   

    好像涉及到Base64编码类似的问题!!!!!
    网上例子多了!
      

  23.   

    用编码应该不对啊!
    字符占8个BIT本来就是最小的
    不管用什么编码,最后还是得用位作单位来存放,才能比直接存放小
    就算用编码,26个字符,最少也要用5位才能表示,
    当然可以不固定长度,不过那样算法就更复杂了!
    不固定长度的话,有的字符编码可能会大于5位,
    还要看出现的概率,决定哪些字符编码长,哪些短
    ……:(