都雪冬 20190912-3 词频统计

此作业要求参见 https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583

代码地址 https://e.coding.net/ddd111/ruanjiangongcheng.git

功能1 小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键
盘在控制台下输入命令。

代码如下:

void CountWord(char *current)
{
    wordNode *pNode = NULL;
    pNode = SearchWord(current);
    if(NULL == pNode)
    {
        return;
    }
    else
    {
        pNode->iWordCount++;
    }
}

截图如下:

其它几个功能考虑了很久,目前还不会做,只能靠自己的理解实现部分功能

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
const int WORD_LENGTH = 256; 
const int FREQUENCY_COUNT=6;    
struct wordNode
{
    char word[WORD_LENGTH];             
    int iWordCount;               
    wordNode *pNext;           
};
 
wordNode *pHeader = NULL;  
 
void CountWord(char *current);
wordNode * SearchWord(char *current);
void PrintResult();
void Release();
 
int main()
{
    char temp[WORD_LENGTH];
    FILE *fp; 
    if((fp=fopen("123.txt", "r"))==NULL )   
    {
        printf("Open file failed!!
");
        exit(1);
    }
        while( EOF != (fscanf(fp,"%s",temp)) )
    {
        CountWord(temp);
    }
       fclose(fp); 
       PrintResult();
          Release(); 
}
 
void CountWord(char *current) 
{
    wordNode *pNode = NULL;
    pNode = SearchWord(current);
    if(NULL == pNode)
    {
        return;
    }
    else
    {
        pNode->iWordCount++;
    }
}
 
wordNode * SearchWord(char *current)
{
    if( NULL == pHeader)
    {
        pHeader = new wordNode;
        strcpy(pHeader->word, current);
        pHeader->iWordCount = 0;
        pHeader->pNext = NULL;
        return pHeader;
    }
    wordNode *pCurr = pHeader;
    wordNode *pPre = NULL;
    while( (NULL != pCurr) && (0 != strcmp(pCurr->word, current)) )
    {
        pPre = pCurr;
        pCurr = pCurr->pNext;
    }
 
    if(NULL == pCurr) 
    {
        pCurr = new wordNode;
        strcpy(pCurr->word, current);
        pCurr->iWordCount = 0;
        pCurr->pNext = NULL;
        pPre->pNext = pCurr;
    }
    return pCurr;
}
 
void PrintResult()
{
    FILE* fp1=fopen("out_all_word_frequency.txt", "w");
    FILE* fp2=fopen("out_high_frequency.txt","w");
    if(NULL == pHeader)
    {
        printf("No Word!!
");
    }
    else
    {
        wordNode *pCurr = pHeader;
 
        while(NULL != pCurr)
        {    
            fprintf(fp1,"%s	%d
", pCurr->word, pCurr->iWordCount);
            printf("%-20s%-20d
", pCurr->word, pCurr->iWordCount);
 
 
            if(pCurr->iWordCount >= FREQUENCY_COUNT)
                fprintf(fp2,"%s	%d
", pCurr->word, pCurr->iWordCount);
 
            pCurr = pCurr->pNext;
        }
         fclose(fp1);
         fclose(fp2);
    }
}
 
void Release()
{
    if(NULL == pHeader)
    {
        return;
    }
    wordNode *pCurr = pHeader;
    while(NULL != pCurr)
    {
        pHeader = pCurr->pNext;
        delete pCurr;
        pCurr = pHeader;
    }
}

截图如下:

PSP:

  预计花费时间 实际花费时间

     时间差     

功能1 30min 74min 44min
功能2 90min 177min 87min
功能3
功能4

原因分析:拿到作业题目之后,原本看上去不难,只是统计单词出现的频率而已,但是真正动手做了才发现有很多需要注意的点,所以实际花的时间远远高于预计的时间,但是最后的结果还是不尽人意,让我明白了要学的还有很多,要更加努力才可以。

原文地址:https://www.cnblogs.com/nenu-dxd/p/11537761.html