用c语言编译个简单压缩程序

用c语言编译个简单压缩程序,第1张

/*

流程是:

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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11553538.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存