编程珠玑第15章字符串stl set和map容器排序字符串

15.1单词

1:生成包含单词的列表,利用c++标准库提供的sets和strings

从文件中分析出单词,并排序输出

#include <iostream>
#include <fstream>
#include <string>
#include <set>
using namespace std;
void TokenWordFromTxt(set<string> &S,ifstream &in)
{
	char *pch;
	char *psrc = NULL;
	for (string str; getline(in,str);)//一行一行的读取换行符号"\n"结束
	{
		cout<<str<<"\n";
		psrc = const_cast<char *>(str.c_str()) ;//利用string::c_str将string 转换成char*,又由于其是const的strtok不接受const,取出常量性
		pch = strtok(psrc,",.: ");
		while(pch != NULL)
		{
			//printf ("---%s\n",pch);
			string t = pch;
			S.insert(t);
			pch = strtok(NULL,",.: \"");//c库提供的分词函数
		}
	}
}
void PrintSet(set<string> &S)
{
	set<string>::iterator iter;
	int i=0;
	for (iter = S.begin();iter!=S.end();++iter)
	{
		i++;
		cout<<"--"<<i<<":"<<*iter<<endl;
	}

}
int main()
{
	ifstream in("D:\\word.txt");//读取文件
	set<string> S;//利用set,stl提供的set
	TokenWordFromTxt(S,in);
	PrintSet(S);
	system("pause");
	return 0;
}

需要按序输出并统计词频,利用map容器

#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;
void TokenWordFromTxt(map<string,int> &M,ifstream &in)
{
	char *pch;
	char *psrc = NULL;
	for (string str; getline(in,str);)//一行一行的读取换行符号"\n"结束
	{
		cout<<str<<"\n";
		psrc = const_cast<char *>(str.c_str()) ;//利用string::c_str将string 转换成char*,又由于其是const的strtok不接受const,取出常量性
		pch = strtok(psrc,",.: ");
		while(pch != NULL)
		{
			//printf ("---%s\n",pch);
			string t = pch;
			M[t]++;
			pch = strtok(NULL,",.: \"");//c库提供的分词函数
		}
	}
}
void PrintSet(map<string,int> &M)
{
	map<string,int>::iterator iter;
	int i=0;
	for (iter = M.begin();iter!=M.end();++iter)
	{
		i++;
		cout<<"--"<<i<<":"<<iter->first<<":"<<iter->second<<endl;
	}

}
int main()
{
	ifstream in("D:\\word.txt");//读取文件
	map<string,int> M;//利用set
	TokenWordFromTxt(M,in);
	PrintSet(M);
	
	system("pause");
	return 0;
}

参考 http://ofey.me/2010/11/c%E4%BB%A5%E5%8D%95%E8%AF%8D%E4%B8%BA%E5%8D%95%E4%BD%8D%E8%AF%BB%E5%8F%96%E6%96%87%E6%9C%AC/

http://topic.csdn.net/u/20080928/13/2ac392f7-df0e-4092-8350-1af408811ab7.html string转char*

http://www.cnblogs.com/shiyangxt/archive/2008/09/08/1287139.htmlC++文件操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值