输出文章中几个最高频率单词和次数

#include "stdio.h"
#include "string.h" 
#include <malloc.h> 
 
typedef struct _link        // 定义该链表是为了存储不重复出现的单词 

    char* ch; 
    int num; 
    _link* next; 
}link; 
 
int main(int argc, char* argv[]) 
{
    // 读入一个txt.文件操作 
    FILE *fp; 
    fp = fopen("text1.txt","r");
 if(fp==NULL)
 {
  printf("找不到文件");
  return 0;
    }
 char word[30]; 
    int pos = 0;        // 亦可用 size_t类型 
    char c; 
    link *head, *pnow, *ptmp,*pt,*pw; 
    head = pnow = ptmp = pt=pw=NULL; 
 
    while (!feof(fp)) 
    { 
        c = fgetc(fp);      //逐个获取的字符 
        if ((c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c=='\'')) 
            word[pos++]=c; 
        else if (pos>0) 
        { 
            word[pos] = '\0'; 
            // 链表遍历,比较链表中的节点值与当前单词 
            ptmp = head; 
            while (ptmp) 
            { 
                if (strcmp(word, ptmp->ch)==0) 
                { 
                    ptmp->num++; 
                    break; 
                } 
                ptmp = ptmp->next; 
            } 
            // 如果链表中没有当前单词,在链表末尾插入节点 
            if (ptmp == NULL) 
            { 
                ptmp = (link*)malloc(sizeof(link)); //注意一下两行的用法 
                ptmp->ch = (char*)malloc(pos); 
                strcpy(ptmp->ch, word); 
                ptmp->num=1; 
                ptmp->next = NULL; 
                if (pnow)   // 插入当前节点为末节点 
                { 
                    pnow->next = ptmp; 
                    pnow = ptmp; 
                } 
                else        // 此处为第一次出现单词的时候 
                    head = pnow = ptmp; 
            } 
            pos=0; 
        } 
    } 
    fclose(fp); // 对文件进行操作,关闭文件
 pt=ptmp=head;
 pw=head->next;
 head->next=NULL;
 while(pw)
 {
  while(ptmp->num>pw->num&&ptmp!=NULL)
  {
   pt=ptmp;
   ptmp=ptmp->next;
  }
   pnow=pw->next;
   pw->next=ptmp;
   pt->next=pw;
   pw=pnow;
 }
 
    // 读取链表,输出单词及其出现的个数 
    ptmp = head; 
   
     for(int i=0;i<10;i++) 
    { 
        printf("%s\t%d\n", ptmp->ch, ptmp->num); 
        ptmp = ptmp->next; 
    } 

 
    return 0; 
}

 这个问题要解决单词的识别和次数统计,按照频率的大小排序然后输出。要注意的是在一篇文章中字母肯定存在大小写的不同,一开始我打算是先将文章中的所有字母转换成小写再去统计,后来我又想跳过这一步,将大小写不同的同一个单词按照不同的单词处理,其实大体上的思想大家应该差不多。欢迎大家来找这个程序的缺陷,共同进步!

原文地址:https://www.cnblogs.com/812969272zheng/p/3577097.html