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

15.1单词

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

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

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

 1 #include <iostream>
 2 #include <fstream>
 3 #include <string>
 4 #include <map>
 5 using namespace std;
 6 void TokenWordFromTxt(map<string,int> &M,ifstream &in)
 7 {
 8     char *pch;
 9     char *psrc = NULL;
10     for (string str; getline(in,str);)//一行一行的读取换行符号"\n"结束
11     {
12         cout<<str<<"\n";
13         psrc = const_cast<char *>(str.c_str()) ;//利用string::c_str将string 转换成char*,又由于其是const的strtok不接受const,取出常量性
14         pch = strtok(psrc,",.: ");
15         while(pch != NULL)
16         {
17             //printf ("---%s\n",pch);
18             string t = pch;
19             M[t]++;
20             pch = strtok(NULL,",.: \"");//c库提供的分词函数
21         }
22     }
23 }
24 void PrintSet(map<string,int> &M)
25 {
26     map<string,int>::iterator iter;
27     int i=0;
28     for (iter = M.begin();iter!=M.end();++iter)
29     {
30         i++;
31         cout<<"--"<<i<<":"<<iter->first<<":"<<iter->second<<endl;
32     }
33 
34 }
35 int main()
36 {
37     ifstream in("D:\\word.txt");//读取文件
38     map<string,int> M;//利用set
39     TokenWordFromTxt(M,in);
40     PrintSet(M);
41     
42     system("pause");
43     return 0;
44 }

 

 



参考

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++文件操作

posted @ 2012-04-19 13:31  foreverlearn  阅读(231)  评论(0)    收藏  举报