c可編解碼
① 赫夫曼編/解碼 c語言程序
HC
=
(HuffmanCode)malloc((n+1)*sizeof(char
*));
p
=
m;
cdlen
=
0;
for(i=1;i<=m;++i)
HT[i].weight
=
0;//遍歷哈夫曼樹時用作結點狀態標志
while(p){
if(HT[p].weight
==
0){
//向左
HT[p].weight
=1;
if(HT[p].lchild!=0){
p=HT[p]lchild;
cd[cdlen++]="0";
}
else
if(HT[p].rchild
==
0){
//登記葉子結點的字元的編碼
HC[p]
=
(char
*)malloc((cdlen+1)*sizeof(char));
cd[cdlen]
=
"\0";
strcpy(HC[p].cd);
//復制編碼(串)
}
}
else
if
(HT[p].weight
==
1){
//向右
HT[p].weight
=2;
if(HT[p].rchild
!=0){
p
=
HT[p].rchild;
cd[cdlen++]
=
"1";
}
}else{
//HT[p].weight
==
2,退回
HT[p].weight
=
0;
p=
HT[p].parent;
--cdlen;
//退到父結點,編碼長
度減1
}//else
}//While
② 請用C語言編寫一個解碼函數
稍等。。。
如果是abc.這個解碼是123還是123?
③ c語言 簡單解碼
ch1=(char) (ch1+3);
ch2=(char) (ch2+3);
強制類型轉換要括起來。
這個其實不用類型轉換的。 int 和 char 可以混合使用。
按你那樣寫就成了 一個 char()函數了。
④ 請用C語言編寫一個解碼函數,把一個英語句子譯成數字代碼。解碼規則是
#include<stdio.h>
intmain()
{
charc;
while((c=getchar())!=' ')
{
if(c=='')
printf("*");
else
{
if(c>=97&&c<=122)
printf("%d",c-=96);
else
{
if(c>=65&&c<=90)
printf("%d",c-=38);
else
printf("%c",c);
}
}
}
return0;
}
⑤ C語言編程題:數字解碼
number=symbol-'0';
⑥ 如何用C語言解碼,要求用原來字母前面的第四個字母代替原來的字母
#include <stdio.h>
void main()
{
char c; while ((c=getchar())!='\n')
{
if ((c>='a'&&c<='z')||(c>='A'&& c<='Z')) //c為小寫字母a-z或者大寫字母A-Z
{
c=c+4; //把c變成其後面的第4個字母
if(c>'Z'&&c<='Z'+4||c>'z') //若c為小寫字母時若大於z即-26,若c為大寫時大於Z並且c同時小於等於Z+4
{
c=c-26;
}
}
printf("%c",c);
} printf("\n");
}
⑦ C語言 編寫一個解碼程序,把一個英語句子譯成數字代碼。
#include <stdio.h>
int main ()
{
char c;
while ((c = getchar()) != '\n')
{
if(c==' ')
{
printf("*");
continue;
}
c-=64;
if (c!=-32)
printf ("%d ",c);
}
printf (".");
return 0;
}
試試看符不符合你的要求
⑧ 2:1卷積碼 c語言編譯碼
charinput[10]={0,0,1,1,1,0,1,1,1,1};
charoutput[5]={0};
intr1=0,r2=0;
inti;
for(i=0;i<5;i++)
{
output[i]=(input[2*i]+r1+r2)&1;
r2=r1;
r1=output[i];
}
for(i=0;i<5;i++)
printf("%d",output[i]);
printf(" ");
⑨ c語言版 哈弗曼編碼和解碼
哈弗曼編碼涵義是將一竄數字或者字母按哈弗曼數的形式編碼,並使得這竄字元中的每個數字或者字母都能被唯一的「0,1」序列來編碼,而且沒有相同的前綴,這是一種非等長的編碼方式。如果你覺得這樣解釋很難聽懂的話就舉個例子:如果用計算機發信息,只能用0和1,但是每個字母的使用頻度又不一樣,比如a ,i,o,e等這些字母使用的就多些,而z,v這樣的字母使用的就少一些,如果所有字母都用等長的0,1序列來編碼的話會造成浪費,那麼我們就把常用的字母用少點的0,1,進行編碼(比如用兩個或三個),不常用的再用多點0,1編碼,但是還不能造成油相同前綴的情況,這會使計算機無法識別,比如E用010,z用01001,計算機就只能識別出前面三個是E,而後面就拋棄或者識別出別的字母。哈弗曼編碼就是出於這樣的條件下產生的。也許這樣的形容還是很抽象,那麼再具體點。加入a,b,c,d,e使用的頻度分別是10,7,5,5,3那麼就可以構造哈弗曼數:從樹頂到樹根,假如左邊是0,右邊是1,那麼就能得到他們的哈弗曼編碼(就是從上到下,到達他們字母經過的路徑),分別是:a:00;b:11;c:10;d:011;e:010;你可以發現他們全部沒有相同的前綴。具體的編碼方式我可以大致的跟你說下,因為我還在上班所以無法使用自己的電腦進行編譯,怕寫的有錯誤,你拿到一個待編碼的數據肯定有標識符(即上面的a,b,c),還有所帶的權值(即3,5,5等)你需要用哈弗曼演算法構造出哈弗曼編碼,即每次取最小的兩個數當作葉子,來生成樹根(樹根的值等於他們的和),整數據就少了一個,直到最後兩個數相加的值作為最終的樹根。然後從上往下,左邊為0右邊為1,到達每個樹葉(即是標識符的位置),那麼路徑的編碼就是他的哈弗曼編碼。以上是演算法,建議你可以用一個結構體(帶標識符,權值,哈弗曼編碼(編碼暫時為空)),用一個vector(C++裡面的數據類型)裝載他們並按照權值大小進行排序,然後通過哈弗曼演算法(另用一個函數來計算)創建一個哈弗曼數,並計算出它的哈弗曼編碼並寫到結構體中,這樣就把字元進行了哈弗曼壓縮。這就是整個過程
⑩ C語言解碼程序
因為你 你輸入的 china 是存在一個緩沖池中, 你調用getchar()他是不斷的從緩沖池中去讀取數據, 第一次 讀取c 然後執行 第二次 讀取h 然後執行 以此類推 , 所以china就會啊~~