UVaoj 213:デコードプログラム
1636 ワード
トランスポートゲート:タイトルリンク
考え方:サイクルを作り、各サイクルには3つのステップが含まれています.
第一歩は、自分で書いたmy_getline取得ファイルの1行ヘッダー(なぜ自分で書くのですか?連絡CでC++を使いたくないしgetsが安全ではないしスペースが入力されているなど)は、1行の文字列を取得する終了時に対応するアドレスの末尾に'0'を終端として付けることに注意してください.取得を終了したフラグはEOF,'\rの3つである.
第2ステップでは,headerとバイナリ数(msg)の関係を処理する.ここではバイナリとそのテーマ自体の特徴を利用して,長さlenで重みをつけようとする.だからtable[len][max_value]表現(len,value)を作って、対応するヘッダーの文字を保存します.
ステップ3でmsgを読み出します.入力の任意性(行随意)から,読みながら操作しながら出力しなければならないと考えられる.したがって、ステップに従って、msgの最初のnum個数を読み出し、その10進数値を返す関数readint(num)を作成します.これにより、readint(3)で次の符号化長(lenとして保存)を取得し、その値が2^len-1になるまでreadint(len)をジャンプし続けるループが作成され、readint(3)が0になると今回のループが終了することを意味する.ただし、末尾に改行がある可能性があります!だからgetchar()で取得すると、EOF(最外周のループ終了)か改行文字が得られます.
考え方:サイクルを作り、各サイクルには3つのステップが含まれています.
第一歩は、自分で書いたmy_getline取得ファイルの1行ヘッダー(なぜ自分で書くのですか?連絡CでC++を使いたくないしgetsが安全ではないしスペースが入力されているなど)は、1行の文字列を取得する終了時に対応するアドレスの末尾に'0'を終端として付けることに注意してください.取得を終了したフラグはEOF,'\rの3つである.
第2ステップでは,headerとバイナリ数(msg)の関係を処理する.ここではバイナリとそのテーマ自体の特徴を利用して,長さlenで重みをつけようとする.だからtable[len][max_value]表現(len,value)を作って、対応するヘッダーの文字を保存します.
ステップ3でmsgを読み出します.入力の任意性(行随意)から,読みながら操作しながら出力しなければならないと考えられる.したがって、ステップに従って、msgの最初のnum個数を読み出し、その10進数値を返す関数readint(num)を作成します.これにより、readint(3)で次の符号化長(lenとして保存)を取得し、その値が2^len-1になるまでreadint(len)をジャンプし続けるループが作成され、readint(3)が0になると今回のループが終了することを意味する.ただし、末尾に改行がある可能性があります!だからgetchar()で取得すると、EOF(最外周のループ終了)か改行文字が得られます.
#include
//#include
//#include
char header[6666];
char table[8][(1<<7)];//(len, value) -> char_in_header
int my_getline(char *header){
//get the line of the stdin, terminated by '
' or '\r' or EOF; return the length of the string
int temp;
int i = 0;
while(EOF != (temp = getchar())){
if(temp !='
' && temp != '\r'){
*(header + i) = (char)temp;
i++;
}
else break;
}
//attention: put '\0' at the end
*(header + i) = '\0';
if(temp == EOF) return EOF;
else return i;
}
int readbit(int num){
//read num bits(0 or 1) from stdin, return the decimal value
char temp;
int ans = 0;
int times = 0;
while(times < num && (temp = getchar())){
if(temp != '\r' && temp != '
'){
times++;
ans += (temp - '0') * (1<