⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tr.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
int dflag 0;int sflag 0;int cflag 0;int save 0;char code[256];char squeez[256];char vect[256];struct string { int last, max, rep; char *p; } string1, string2;int inbuf[259];main(argc,argv)char **argv;{	int i, j;	int c, d;	char *compl;	extern fout;	string1.last = string2.last = 0;	string1.max = string2.max = 0;	string1.rep = string2.rep = 0;	string1.p = string2.p = "";	if(--argc>0) {		argv++;		if(*argv[0]=='-'&&argv[0][1]!=0) {			while(*++argv[0])				switch(*argv[0]) {				case 'c':					cflag++;					continue;				case 'd':					dflag++;					continue;				case 's':					sflag++;					continue;				}			argc--;			argv++;		}	}	if(argc>0) string1.p = argv[0];	if(argc>1) string2.p = argv[1];	for(i=0; i<256; i++)		code[i] = vect[i] = 0;	if(cflag) {		while(c = next(&string1))			vect[c&0377] = 1;		j = 0;		for(i=1; i<256; i++)			if(vect[i]==0) vect[j++] = i;		vect[j] = 0;		compl = vect;	}	for(i=0; i<256; i++)		squeez[i] = 0;	for(;;){		if(cflag) c = *compl++;		else c = next(&string1);		if(c==0) break;		d = next(&string2);		if(d==0) d = c;		code[c&0377] = d;		squeez[d&0377] = 1;	}	while(d = next(&string2))		squeez[d&0377] = 1;	squeez[0] = 1;	for(i=0;i<256;i++) {		if(code[i]==0) code[i] = i;		else if(dflag) code[i] = 0;	}	inbuf[0] = 0;	fout = dup(1);	close(1);	while((c=getc(inbuf)) >=0 ) {		if(c == 0) continue;		if(c = code[c&0377]&0377)			if(!sflag || c!=save || !squeez[c&0377])				putchar(save = c);	}	flush();}next(s)struct string *s;{	int a, b, c, n;	int base;	if(--s->rep > 0) return(s->last);	if(s->last < s->max) return(++s->last);	if(*s->p=='[') {		nextc(s);		s->last = a = nextc(s);		s->max = 0;		switch(nextc(s)) {		case '-':			b = nextc(s);			if(b<a || *s->p++!=']')				goto error;			s->max = b;			return(a);		case '*':			base = (*s->p=='0')?8:10;			n = 0;			while((c = *s->p)>='0' && c<'0'+base) {				n = base*n + c - '0';				s->p++;			}			if(*s->p++!=']') goto error;			if(n==0) n = 1000;			s->rep = n;			return(a);		default:		error:			write(1,"Bad string\n",11);			exit();		}	}	return(nextc(s));}nextc(s)struct string *s;{	int c, i, n;	c = *s->p++;	if(c=='\\') {		i = n = 0;		while(i<3 && (c = *s->p)>='0' && c<='7') {			n = n*8 + c - '0';			i++;			s->p++;		}		if(i>0) c = n;		else c = *s->p++;	}	if(c==0) *--s->p = 0;	return(c&0377);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -