c++ 从文件中读取字符串 按字典排序 并统计个数

#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>
#include <fstream>

using namespace std;

const int MAX_SIZE = 40;
void GetWords(vector<string> &vec)
{
	char str[ MAX_SIZE];
	ifstream InFile("E:\\test.txt");
	while(!InFile.eof())
	{
		InFile.getline(str,MAX_SIZE);

		const char * split = ",* ;"; 
		char * p; 
		p = strtok (str,split); 
		while(p!=NULL)
		{ 
			string str = p;
			vec.push_back(str);
			p = strtok(NULL,split); 
		} 
	}
	copy (vec.begin(),vec.end(),ostream_iterator<string>(cout,"  "));
}

void SortWords( vector<string> &vec,map<string,int> &words)
{
	vector<string>::iterator it = vec.begin();
	for(it; it != vec.end(); ++it)
	{
		if(words.find(*it) != words.end() )
		{
			int i = words[*it];
			++i;
			words[*it] = i;

		}
		else
		{
			words.insert(map<string,int>::value_type(*it,1));
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{	
	vector<string> vec;
	map<string,int> words;
	GetWords(vec);
	SortWords( vec,words);

	cout<<endl<<"====After sort===="<<endl;
	map<string,int>::iterator mapit = words.begin();
	for(mapit;mapit != words.end();++mapit)
	{
		cout<< mapit->first<<"  "<<mapit->second<<endl;
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值