流程是:
1.读取一个字符,写入A
2.再读取一个字符,写入B
3.判断AB是否相等,相等转4,否则转5
4.一直读,同时统计数量,直到读取到和A不相等的字符,将改字符写入B,转5
5.将对应数据写入文件
下面是伪代码
*/
char A
char B
int i
File writeFile//要写入的文件
File readFile//要读的文件
A=readChar(readFile)//读一个字符
while(文件未读完){
B=readChar(readFile)//读一个字符
if(A==B){
i=2
while((B=readChar(readFile))==A){//一直读,直到读取的字符和A不一样
i++
}
write(writeFile,A+"$"+i)//i代表重复数量
A=B
}else{
write(writeFile,A)
A=B
}
}
自己编写一个好的压缩与解压缩程序,算法是相当复杂的,如果只是想把多个文件打个包并不难,把多个文件写入一个二进制文件即可,当然这里面也要有文件名如何保存,每个文件到哪结束等的问题。最简单的方法是调用第三方软比如zip等,建议调用ARJ.EXE或LHARC.EXE因为它们只一个文件并且体积都很小压缩比也不错。
#include <stdio.h>
void stringZip(const char
*pInputStr, long lInputLen, char *pOutputStr)
{ int n=1
char c,*p1=pInputStr,*p2=pOutputStr
while(*p1)
{
c=*(p1++)
while(*p1==c){n++p1++}
if(n>1)
{
if(n>999){*(p2++)=48+n/1000n/=10}
if(n>99){*(p2++)=48+n/100n/=10}
if(n>9){*(p2++)=48+n/10n/=10}
*(p2++)=48+n
}
*(p2++)=c
n=1
}
*p2='\0'
}
void main()
{ char s1[200],s2[200]
gets(s1)
stringZip(s1,strlen(s1),s2)
puts(s2)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)