[問題] LZW壓縮印不出東西
我是第一次寫程式,太難的語法完全不懂
用最笨的方法,寫了LZW壓縮
感覺邏輯都對為什麼印出那麼詭異的結果
請高手賜教
---------------------------------------
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
# define NUM 1000
//使用LZW壓縮一段文章 輸出s c output code string
int main() {
char diction[NUM][NUM],s[NUM],c;
int i,j,u;
FILE *p,*e; //p讀取用,e寫入
p=fopen("C:\\Documents and Settings\\dssdsd\\encode.txt","r");
e=fopen("C:\\Documents and Settings\\dssdsd\\encode.doc","w");
fprintf(e,"s\t\t\t\t\tc\toutput\tcode\tstring\n--------------------------------------\n");
//a到z
for(j=0;j<=25;j++)
diction[j][0]=j+97;
j++;
diction[j][0]=33;
j++;
diction[j][0]=39;
j++;
diction[j][0]=97;
//以上建立a~z
fscanf(p,"%c",&c);
s[0]=c;
while(fscanf(p,"%c",&c)!=EOF){
fprintf(e,"%s\t\t\t%c\n",s,c);
j=0;
while(strcmp(s ,diction[j] )!=0)//找出s在字典對應的code
j++;
u=j;//存入u
i=0;
while(s[i]!='\0')
i++;
s[i]=c;//s=s+c
j=0;
while(strcmp(s ,diction[j] )!=0){//搜尋s+c是否存在字典
j++;//
if(diction[j][0]=='\0')break;//搜尋不到對應的字串跳出回圈
}
if(strcmp(s ,diction[j] )==0){//存在字典
fprintf(e,"\n");
memset(s,'\0',sizeof(s));
s[0]=c;//s=c
}
else{//不存在字典
strcpy(diction[j],s);//加入字典
fprintf(e,"%d\t%d\t%s\n",u,j,s);//列印出output,code,string
}
}
fclose(p);
fclose(e);
system("pause");
return 0;
}
s c output code string
--------------------------------------
w
w e 22 26 we
we f 26 30 wef
wef f 30 31 weff
weff s 31 32 weffs
weffs a 32 33 weffsa
weffsa b 33 34 weffsab
weffsab b 34 35 weffsabb
weffsabb a 35 36 weffsabba
weffsabba b 36 37 weffsabbab
weffsabbab c 37 38 weffsabbabc
weffsabbabc a 38 39 weffsabbabca
weffsabbabca b 39 40 weffsabbabcab
weffsabbabcab b 40 41 weffsabbabcabb
weffsabbabcabb a 41 42 weffsabbabcabba
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.131.181
※ 編輯: ayaerika 來自: 220.136.131.181 (04/04 23:13)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-10
29