短文 词频

本程序从正文文件text.txt读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到正文文件word.txt中.程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历该二叉树,将遍历经过的二叉树上的节点的内容输出.


#include<iostream>
#include<string>
#include<fstream>

using namespace std;

ifstream inFile("text.txt",ios::in);
ofstream outFile("word.txt",ios::trunc);

struct treeNode
{
	string data;
	int count;
	treeNode * leftChild,*rightChild;
	treeNode(string data)
	{
		this->data = data;
		this->count = 1;
		this->leftChild = this->rightChild = NULL;
	}
};

void biTree(treeNode *&node,string word)//建立有序二叉树
{
	if( node==NULL )
	{
		node = new treeNode(word);
	}
	else
	{
		int cmp;
		cmp = strcmp(node->data.c_str(),word.c_str());
		if(cmp == 0)
			++node->count;
		else if(cmp > 0)
			biTree(node->leftChild,word);
		else
			biTree(node->rightChild,word);
	}
}

void midOrder(treeNode *node) //中序遍历
{
	if(node==NULL)
	{
		return;
	}	
	midOrder(node->leftChild);
	cout<<node->data<<ends<<node->count<<endl;
	outFile<<node->data<<ends<<node->count<<endl;
	midOrder(node->rightChild);	
}

int main()
{
	treeNode *node=NULL;
	//char inBuffer[100];
	string inBuffer;
	string word;	
	if(!inFile.is_open())
	{
		cout<<"Error opening file"<<endl;
		exit(0);
	}
	if(!outFile)
	{
		cerr<<"Error opening outfile"<<endl;
		exit(0);
	}
	while(getline(inFile,inBuffer))  //读取一行
	{
		size_t i=0;
		inBuffer+='\0';
		//cout<<inBuffer<<endl;
		while(i<inBuffer.size())   //分解成单词
		{ 
			if((inBuffer[i]<='z'&&inBuffer[i]>='a') ||(inBuffer[i]<='Z'&&inBuffer[i]>='A')) 
				word += inBuffer[i];
			else
			{
				if(!word.empty())
					biTree(node,word);
					//cout<<word<<endl;
				word.clear();
			}
			++i;
		}
		inBuffer.clear();
	}
	midOrder(node);
	inFile.close();
	outFile.close();
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值