Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
是不是所有单词都用小写表示(大家看看我的程序,这题的意思就是不很明显)#include<stdio.h> #include<string.h> #include<malloc.h> #define MULTIPLIER 37 #define NHASH 500 int max=0; unsigned int hash(char *str) { unsigned int h; unsigned char *p; h=0; for(p=(unsigned char *)str;*p!='\0';p++) h=MULTIPLIER*h+*p; return h%NHASH; } typedef struct Nameval Nameval; struct Nameval { char *name; int num; Nameval *next; }; Nameval *symtab[NHASH]; int lookup(char *name) { int h,i; Nameval *sym; h=hash(name); for(i=0;name[i]!='\0';i++) if(name[i]>='A'&&name[i]<='Z') name[i]+=32; for(sym=symtab[h];sym!=NULL;sym=sym->next) if(strcmp(name,sym->name)==0) { sym->num++; if(sym->num>max) max=sym->num; return 0; } sym=(Nameval *)malloc(sizeof(Nameval)); sym->name=name; sym->num=1; sym->next=symtab[h]; symtab[h]=sym; return 0; } int main() { char *tmp,*a[100]; int size,i,j; char arry[100],*name; Nameval *sy; while(scanf("%s",arry)!=EOF) { size=strlen(arry); for(i=size-1;i>0;i--) if((arry[i]>='a'&&arry[i]<='z')||(arry[i]>='A'&&arry[i]<='Z')||(arry[i]>='0'&&arry[i]<='9')) break; arry[i+1]='\0'; name=(char *)malloc(strlen(arry)+1); strcpy(name,arry); lookup(name); } printf("%d occurrences\n",max); j=0; for(i=0;i<NHASH;i++) for(sy=symtab[i];sy!=NULL;sy=sy->next) if(sy->num==max) a[j++]=sy->name; max=j; for(i=0;i<max;i++) for(j=i+1;j<max;j++) if(strcmp(a[i],a[j])>0) { tmp=a[i]; a[i]=a[j]; a[j]=tmp; } for(i=0;i<max;i++) printf("%s\n",a[i]); } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator