一道笔试题:统计文件中的单词出现次数
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);
}
#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);
}
相关文章推荐
- sort +awk+uniq 统计文件中出现次数最多的前10个单词
- 统计文件中某个单词出现的次数
- Hadoop 统计文件中某个单词出现的次数
- sort +awk+uniq 统计文件中出现次数最多的前10个单词
- 统计一篇英文文件中,单词出现的次数,并按单词的长度进行排序
- wc:统计一个文件里出现某个单词出现的次数
- 练习2-4:编一个程序统计文件中特定单词出现的次数(要求使用string类的运算符==来查找单词)
- sort +awk+uniq 统计文件中出现次数最多的前10个单词
- NIO MappedByteBuffer读大文件并统计出现次数最多的TOP K个单词
- scala统计一个文件夹下面所有文件的单词出现的总次数
- 统计文件中出现次数最多的前10个单词
- 大数据第8天----------------------文件中统计单词出现的次数
- java 读取键盘输入到txt文件,统计每个单词出现的次数并输出
- 黑马程序员——统计文件中每个英文单词出现的次数
- 【代码】统计文件中,不同字符出现的次数(可排序,没有处理英文单词、数字和大小写)
- Hadoop 统计文件中单词出现的次数
- Linux命令经典面试题:统计文件中出现次数最多的前10个单词
- sort +awk+uniq 统计文件中出现次数最多的前10个单词 (2012-12-05 15:57:12)转载▼ 标签: 转载 原文地址:sort +awk+uniq 统计文件中出现次数最多的前
- c语言统计从文件读取的文章中所有单词的出现次数
- 用python统计文件中各个单词出现的次数