rlencode.c
来自「idel虚拟机源码」· C语言 代码 · 共 75 行
C
75 行
/* Run-length encoding. Stolen from _Software Tools_ page 44. FIXME: check error return codes on I/O */#include <stdio.h>enum { MAXCHUNK = 255, RCODE = 0, THRESH = 5};static char buf[MAXCHUNK];static voidputbuf (FILE *out, int n){ if (n > 0) { putc (n, out); fwrite (buf, 1, n, out); }}static voidencode (FILE *out, FILE *in){ int c, lastc; int nrep, nsave; nsave = 0; for (lastc = getc (in); lastc != EOF; lastc = c) { for (nrep = 1; (c = getc (in)) == lastc; ++nrep) if (nrep >= MAXCHUNK) break; if (nrep < THRESH) for (; nrep > 0; --nrep) { buf[nsave++] = lastc; if (nsave >= MAXCHUNK) { putbuf (out, nsave); nsave = 0; } } else { putbuf (out, nsave); nsave = 0; putc (RCODE, out); putc (lastc, out); putc (nrep, out); } } putbuf (out, nsave);}int main (void){ encode (stdout, stdin); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?