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

📄 what4.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic char *sccsid = "@(#)what4.c	4.1 (Berkeley) 5/6/83";#endif#include "what..c"#define NW 5#define ZIPF 10#define HASHF 3#define WLEN 10#define SAME 0#define TSIZE HASHF*ZIPF*NW#define NF 10struct wst { 	char *tx; 	int ct; } ;int HSIZE;static struct wst word[TSIZE];static char tbuf[NW*ZIPF*WLEN], *tp tbuf;freqwd ( fn, wd, nin )char *fn[], *wd[];{	FILE *fi[NF];	int nw 0, i, any, nf, j, wexch(), wcomp();	char tw[20];	for(HSIZE=TSIZE; !prime(HSIZE); HSIZE--);	for(nf=0; fn[nf] && nf<NF; nf++)		fi[nf] = fn[nf][0] ? fopen(fn[nf], "r") : NULL;	do {		any=0;		for(i=0; i<nf; i++)		{			if (fi[i]==NULL) continue;			if (gw(fi[i], tw)==0)			{				fclose(fi[i]);				fi[i]==NULL;				continue;			}			any=1;			if (common(tw)) continue;			if (strlen(tw)<3) continue;			j = lookup (tw);			if (j<0 && nw < ZIPF*NW)			{				j = -j;				strcpy (tp, tw);				word[j].tx = tp;				while (*tp++);				assert (tp < tbuf+NW*ZIPF*WLEN);				word[j].ct = 1;				nw++;			}			else if (j>0)				word[j].ct++;		}	} 	while (any>0);	shell ( TSIZE, wcomp, wexch );	for(nw=0; word[nw].ct >0 && nw<TSIZE; nw++)		if (nw>=nin*2 && word[nw].ct != word[0].ct)			break;	for(i=0; i<nw; i++)		wd[i] = word[i].tx;	return(nw);}lookup (wt)char *wt;{	int h;	h = hash(wt);	for( h = h%HSIZE; word[h].tx; h = (h+1)%HSIZE)	{		if (h==0) continue;		if (strcmp(wt, word[h].tx) == SAME)			return (h);	}	return ( -h );}hash (s)char *s;{	int k 0, c 0, i 0;	while ( c = *s++ )		k ^= (c << (i++%5) );	return (k>0 ? k : -k);}gw (f, t)char *t;FILE *f;{	int start 1, oldc ' ', c;	if (f==NULL) return (0);	while ( (c=getc(f)) != EOF)	{		if (isupper(c)) c= tolower(c);		if (start==1)			if (!alphanum(c, oldc))				continue;			else				start=0;		if (start==0)			if (alphanum(c, oldc))				*t++ = c;			else			{				*t=0;				return(1);			}		oldc=c;	}	return(0);}alphanum( c, oldc ){	if (isalpha(c) || isdigit(c)) return(1);	if (isalpha(oldc))		if (c== '\'' || c == '-') return(1);	return(0);}wcomp (n1, n2){	return (word[n1].ct >= word[n2].ct);}wexch (n1, n2){	struct wst tt;	tt.tx = word[n1].tx; 	tt.ct = word[n1].ct;	word[n1].tx = word[n2].tx; 	word[n1].ct = word[n2].ct;	word[n2].tx = tt.tx; 	word[n2].ct = tt.ct;}prime(n){	/* only executed once- slow is ok */	int i;	if (n%2==0) return(0);	for(i=3; i*i<=n; i+= 2)		if (n%i ==0 ) return(0);	return(1);}trimnl(s)char *s;{	while (*s)s++;	if (*--s=='\n') *s=0;}/* this is the test for what4.c as a standalone prog ... */# ifdef 0main (argc, argv)char *argv[];{	char *ff[10], *wd[20], **ffp ff;	int n, i;	while (--argc)		*ffp++ = *++argv;	*ffp=0;	n=freqwd(ff,wd);	for(i=0; i<n; i++)		printf("%s\n",wd[i]);	printf("total of %d items\n",n);}# endif 0

⌨️ 快捷键说明

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