#include<stdio.h> #include<string.h> #include<stdlib.h> struct str{ char s[21]; int n; struct str *next; }; struct str *head=NULL,*N=NULL; int flag_fist=1; int process(char*); int main(){ FILE *f; char string[21]; struct str *i,*l; f=fopen("K:\\Workspase\\test\\test.txt","r"); while(1){ if(flag_fist){ head=malloc(sizeof(struct str)); //不检查是否分配到空间 N=head; }else N=malloc(sizeof(struct str)); //同上 N->next=NULL; fscanf(f,"%s",string); if(feof(f)) break; //注意!!用这里控制循环,防止最后一个字符串被读多一次 if(!process(string)){ //如果字符串第一次出现就加入链表,否则只计数 strcpy(N->s,string); N->n=1; if(!flag_fist){ for(i=head;i&&*N->s>*i->s;l=i,i=i->next); //用插入的方法进行排序(根据首字母大小) if(!i) l->next=N; //将节点放在尾 if(i==head) head=N,head->next=i; //将节点放在首 else l->next=N,N->next=i; //在中间的位置插入 }else flag_fist--; } } for(;head;head=head->next){ printf("%s %d\n",head->s,head->n); } fclose(f); return 0; } int process(char *s){ struct str *i=head; for(;i&&strcmp(s,i->s);i=i->next); if(!i) return 0; //该字符串没出现过 i->n++; //该字符串已经出现过 return 1; }
统计文件中的各个字符串的数量
最新推荐文章于 2022-03-31 16:01:55 发布