请教关于C的问题,高分相送,急!!! 字符数组char A[n],如何用更小的空间存储这个字符数组?请写出转换函数。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 struct CharArray{ char c; int length;};用 CharArray 结构做为数组的记号, 到用时, 在需要时, 再动态分配字符数组? what mean?i can't understand! struct CharArray{ char* c; int length;};是不是这个意思? 就是用一个函数,将字符数组char A[n](字符由a~z组成),用更小的空间存储。例如:将agasfghgerhdfhdfgh存储到更小的空间中。楼上兄弟realdreamer的意思,我也没能明白 一般而言,A[n]是占用n个字节,我不知道还怎么占更小的空间顶楼的回复不懂 用位操作可以做到用5个BIT可以表现一个字符,这样每个字符可以压缩3个BIT 可根据设置一个字符数组,初始化大小根据 n*5/8 取大于它的最小的整数用移位来进行存储,每次移5位然后加96即是原字符。存时减96因为a--97 ,01100001 z--122,01111010所以只用后五位就可以区分了 前面的那位提到的,ASCII码也许是个突破口!让我猛共同来想一想1 不用啊,去掉前面的三个BIT后面就是1到26啊只在加或减96就可以了!以5个BIT为一个存储单位不过好像是会慢很多啊 借贵地问一个问题:如何知道一个已知项目的特点?是sdi的还是mdi的?在创建项目时最后一步说的很清楚,可是readme.txt中却没有? 不是表示上的问题,是多个字符压缩的问题吧?先出现的每出现一次给个代号,以后的字符只要是曾经出现过的,统统用代号表示即可。或者类似组合BCD码那样。 不是,我觉得是存储格式的问题,上述的ascII码的方法我觉得还是挺对路的 上面的5个Bits就可以存放的思路还可以!能够实现。 应该不是代号可以解决的a-z这么简单的字符找什么代号能比它本身好呢?如果从出现的次数着手的话,还要记录位置这样,对于N很大的情况是可行的,可以算算用这样的算法,在N大于多少时才能节省空间否则,不但不能节省,还需要更多的空间开销 struct Array{ int char0:5; int char1:5; int char2:5; int char3:5; int char4:5; int char5:5; int empty:2;} 如果只是笔试题目,因该不会让你写很复杂的算法,hyflying() 说得就不错了,主要是对算法进行一些优化,代码写得整齐一些,添加必要的备注。我想应该没有问题的吧。 对啊,C语言可以以BIT为单位建立变量啊!int str[n]:5; //不知这样行吗? 好像不对啊,以BIT为单位建立的变量长度也并不小于一个字符的长度啊,只是其它的位不可用吧,那样的话,还是不能节省空间我记不清了,去查查书吧 to hyflying() :上面的一个struct Array{}变量4字节,可以存6个字符.要不用huffmen编码 好象可以吧,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)) 好象可以吧,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)) 好像涉及到Base64编码类似的问题!!!!!网上例子多了! 用编码应该不对啊!字符占8个BIT本来就是最小的不管用什么编码,最后还是得用位作单位来存放,才能比直接存放小就算用编码,26个字符,最少也要用5位才能表示,当然可以不固定长度,不过那样算法就更复杂了!不固定长度的话,有的字符编码可能会大于5位,还要看出现的概率,决定哪些字符编码长,哪些短……:( CDialogEx 虚拟列表中OnLvnGetdispinfo 函数不触发 关于自动保存文件夹疑问,谢谢大家啦 关于抓包分析的问题 用ATL编写MMC的问题 参数传递窗口句柄 树形控件问题 Activex中如何返回字符串? 如何杀死98下一个没有界面的程序 怎样从SafeArray里面抽出指定的值 protobuf 使用mingw,编译出静态库,如何在visual studio 200x里面使用。 请问怎样可以将ctrl+alt+delete中所有列出的内容逐条读出? Windows98的问题还是MFC的问题,或者是我的问题!
char c;
int length;
};用 CharArray 结构做为数组的记号, 到用时, 在需要时, 再动态分配字符数组?
i can't understand!
char* c;
int length;
};
是不是这个意思?
例如:将agasfghgerhdfhdfgh存储到更小的空间中。楼上兄弟realdreamer的意思,我也没能明白
用5个BIT可以表现一个字符,
这样每个字符可以压缩3个BIT
初始化大小根据 n*5/8 取大于它的最小的整数
用移位来进行存储,每次移5位
然后加96即是原字符。存时减96
因为a--97 ,01100001
z--122,01111010
所以只用后五位就可以区分了
后面就是1到26啊
只在加或减96就可以了!以5个BIT为一个存储单位
不过好像是会慢很多啊
如何知道一个已知项目的特点?是sdi的还是mdi的?在创建项目时最后一步说的很清楚,可是readme.txt中却没有?
先出现的每出现一次给个代号,以后的字符只要是曾经出现过的,统统用代号表示即可。
或者类似组合BCD码那样。
能够实现。
a-z这么简单的字符找什么代号能比它本身好呢?
如果从出现的次数着手的话,还要记录位置
这样,对于N很大的情况是可行的,
可以算算用这样的算法,在N大于多少时才能节省空间
否则,不但不能节省,还需要更多的空间开销
{
int char0:5;
int char1:5;
int char2:5;
int char3:5;
int char4:5;
int char5:5;
int empty:2;
}
以BIT为单位建立的变量长度也并不小于一个字符的长度啊,
只是其它的位不可用吧,那样的话,还是不能节省空间
我记不清了,去查查书吧
上面的一个struct Array{}变量4字节,可以存6个字符.
要不用huffmen编码
网上例子多了!
字符占8个BIT本来就是最小的
不管用什么编码,最后还是得用位作单位来存放,才能比直接存放小
就算用编码,26个字符,最少也要用5位才能表示,
当然可以不固定长度,不过那样算法就更复杂了!
不固定长度的话,有的字符编码可能会大于5位,
还要看出现的概率,决定哪些字符编码长,哪些短
……:(