统计一个文件英文单词的个数

原创 2015年07月08日 14:53:51
/*
	统计一个文件内,英文单词的个数,并按 word = count的格式顺序输出	
	统计输出总的英文单词个数
*/

#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
	string line;
	//打开输入文件
	ifstream input("transform.txt");
	//打开输出文件
	ofstream output("result.txt");
	//使用两个vector来实现map的功能,区别是按顺序统计单词,而不是按键值
	vector<string> wordVec;
	vector<int> countVec(200);
	//单词计数
	int wordCount=0;
	//每次读一行
	while(getline(input,line))
	{	
		size_t pos=0;
		//先按空格分割字符串
		while(pos!=line.size()){
			if(line[pos]!=' '){
				string word;
				while(pos!=line.size() && line[pos]!=' '){
					word+=line[pos];
					++pos;
				}
				
				//去掉子字符串的前导标点符号
				int prepos=0;
				while(prepos!=word.size() && ispunct(word[prepos])){
					++prepos;
				}
			
				//去掉子字符串的后缀标点符号
				//注意无符号数和有符号数
				int pofixPos=word.size()-1;
				while((pofixPos>=0) && ispunct(word[pofixPos])){
					--pofixPos;
				}
			
				//跳过无效单词的统计操作
				if(prepos==word.size() || pofixPos<0)
					continue;
				else
					++wordCount;
				//得到处理后的单词,统计单词个数
				string pureWord=word.substr(prepos,pofixPos-prepos+1);
				vector<string>::iterator iter=find(wordVec.begin(),wordVec.end(),word);
				if(iter==wordVec.end()){
					countVec[iter-wordVec.begin()]++;
					wordVec.push_back(pureWord);
				}else
					countVec[iter-wordVec.begin()]++;
				if(pos==line.size())
					break;			
			}
			++pos;		
		}
	}
	//关闭输入文件
	input.close();
	//遍历得的单词统计的详细结果
	vector<string>::iterator traiter=wordVec.begin();
	vector<int>::iterator coniter=countVec.begin();
	output<<"单词总数 :"<<wordCount<<endl;
	while(traiter!=wordVec.end()){
		output<<*traiter<<" = "<<*coniter<<endl;
		++traiter;
		++coniter;
	}
	//关闭输出文件
	output.close();
	return 0;
}

输入文件transform.txt内容:

My father was a self-taught mandolin player. He was one of the best string instrument players in our town. 
He could't read music, but if he heard a tune a few times, he could play it. When he was younger, he was a member of a small country music band. 
They would play at local dances and on a few occasions would play for the local radio station. 
He often told us how he had auditioned and earned a position in a band that featured Patsy Cline as their lead singer.

输出文件result.txt内容:

单词总数 :91
My = 1
father = 1
was = 4
a = 8
self-taught = 1
mandolin = 1
player = 1
He = 3
one = 1
of = 2
the = 2
best = 1
string = 1
instrument = 1
players = 1
in = 2
our = 1
town = 1
could't = 1
read = 1
music = 2
but = 1
if = 1
he = 5
heard = 1
tune = 1
few = 2
times = 1
could = 1
play = 3
it = 1
When = 1
younger = 1
member = 1
small = 1
country = 1
band = 2
They = 1
would = 2
at = 1
local = 2
dances = 1
and = 2
on = 1
occasions = 1
for = 1
radio = 1
station = 1
often = 1
told = 1
us = 1
how = 1
had = 1
auditioned = 1
earned = 1
position = 1
that = 1
featured = 1
Patsy = 1
Cline = 1
as = 1
their = 1
lead = 1
singer = 1


相关文章推荐

统计文本英文单词总个数,并列出每个单词的个数

package test; /* * Task :统计文本英文单词总个数,并列出每个单词的个数 * * Date:2014.02.26 * *Author:璀若星辰 * */ import...

统计文件中的单词个数

C语言中统计文件中的单词个数,这里默认单词之间都是以空格分隔的,而且没有判断单词的正误。原理比较简单,当读取到的空字符之前是个非空字符时,说明读取了一个完整单词。...

统计单词个数

题目描述 Description 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1...

类似于微信通讯录的界面Demo

这几天遇到一个项目需要向微信通讯录那样展示联系人,这里我做了一个简单的例子,希望可以帮助大家 先来看下界面的实现效果                  上面的是在搜索框搜索...

iOS FMDB的使用(增,删,改,查,sqlite存取图片)

在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FMDB的使用... 例: 增,删,改,查,sqlite存取图...

统计英文单词的个数的python代码 及 字符串分割

字符串分割 str="a|and|hello|||ab" alist = str.split('|') print alist结果 str="a hello{这里换成5个空格}...
  • zm2714
  • zm2714
  • 2012年10月24日 10:54
  • 10076

每天一个小程序之python实现统计英文单词出现个数

python实现任一个英文的纯文本文件,统计其中的单词出现的个数、行数、字符数 新浪微博看到: 刘鑫-MarsLiu:既然有朋友提到python练习,我每天想一个吧,开个tag叫#每天一个小程序#今天...

统计分析文章中英文单词出现次数及频率(C++实现)

设计思路: 1.为了统计数据具有实际意义: 统计中需要剔除一些无统计意义的词,例如 am is are 等虚词、代词、连词等。 一般的文章句首单词首字母为大写,此时需要将此类情况的大写字母转化为...

使用Python+NLTK实现英文单词词频统计

使用Python+NLTK实现英文单词词频统计使用PythonNLTK实现英文单词词频统计 应用场景 Fork Me 参考运行环境 流程步骤图 详细步骤 读取文件 过滤特殊符号以及还原常见缩写单词 分...
  • heykid
  • heykid
  • 2017年03月16日 15:42
  • 1541

统计英文单词词频(c版)

统计英文单词词频–C思想:c和java有很大的区别,如果是c要进行字符串这类问题处理的话,是更多的算法,而java的话可以有很多类来帮助我们减少如何设计算法。所以硬是要用c的话应该这样,首先定义一个结...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:统计一个文件英文单词的个数
举报原因:
原因补充:

(最多只允许输入30个字)