编程珠玑第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://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++文件操作
浙公网安备 33010602011771号