您的位置:首页 > 其它

一道笔试题:统计文件中的单词出现次数

2011-09-19 20:19 429 查看
统计test.txt文件中的单词出现次数:
#include <stdio.h>

#include <malloc.h>

#include <ctype.h>

#include <string.h>

#include "windows.h"

#define SOURCE_FILE "test.txt"

#define OUTPUT_FILE "word.txt"

#define MAX_WORD_LEN 128

typedef struct treenode

{

char szWord[MAX_WORD_LEN];

int nCount;

struct treenode* pLeft;

struct treenode* pRight;

}BNODE;

int getword(FILE* pFile,char* pasWordBuffer,int nBufferLen)

{

int result = 0;

result = fscanf(pFile, "%s", pasWordBuffer);

if(EOF == result || 0 == result)

result = 0;

else

result = 1;

return result;

}

void binary_tree(BNODE** ppNode,char* pszWord)

{

BNODE* pCurrentNode = NULL; //

BNODE* pMemoNode = NULL; //

int nStrCmpRes = 0; //

if(ppNode != NULL && pszWord != NULL)

{

// BNODE* pCurrentNode = NULL;

// BNODE* pMemoNode = NULL;

// int nStrCmpRes=0;

pCurrentNode = *ppNode; //____(1)_____

while(pCurrentNode)

{

//寻找插入位置

nStrCmpRes = strcmp(pszWord, pCurrentNode->szWord); //___(2)___ //如果 pszWord 大于 pCurrentNode->szWord,返回正数

if(!nStrCmpRes)

{

pCurrentNode->nCount++; //___(3)___

return;//如果当前节点的值等于pszWord就返回

}

else

{

pMemoNode=pCurrentNode;// ___(4)___

pCurrentNode = nStrCmpRes>0? pCurrentNode->pRight : pCurrentNode->pLeft;

}

}

}

pCurrentNode = new BNODE;//已有的二叉树里面无节点的值为pszWord,创建一个新节点

if(pCurrentNode != NULL)

{

memset(pCurrentNode,0,sizeof(BNODE));

strncpy(pCurrentNode->szWord,pszWord,MAX_WORD_LEN-1);

pCurrentNode->nCount=1;

}

if(pMemoNode==NULL)

{

*ppNode= pCurrentNode; // ___(5)___//创建二叉树的第一个节点时

}

else

if(nStrCmpRes>0)

{

pMemoNode->pRight=pCurrentNode;//pszWord的值比现有二叉树右节点还大,所以放在右边。

}

else

{

pMemoNode->pLeft=pCurrentNode;

}

}

void midorder(FILE* pFile,BNODE* pNode)

{

if(!pNode||!pFile) return; //___(6)___

midorder(pFile,pNode->pLeft);

fprintf(pFile,"%s %d\n",pNode->szWord,pNode->nCount);

midorder(pFile,pNode->pRight);

}

void main()

{

FILE* pFile=NULL;

BNODE* pRootNode=NULL;

char szWord[MAX_WORD_LEN]={0};

pFile=fopen(SOURCE_FILE,"r");

if(pFile==NULL)

{

printf("Can't open file %s\n%d",SOURCE_FILE,GetLastError());

return;

}

while(getword(pFile,szWord,MAX_WORD_LEN) == 1)

{

binary_tree(&pRootNode,szWord); // ___(7)___

}

fclose(pFile);

pFile=fopen(OUTPUT_FILE,"w");

midorder(pFile,pRootNode);

fclose(pFile);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐