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

来源:互联网 发布:ldc数据 编辑:程序博客网 时间:2024/04/30 03:48

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提供的setTokenWordFromTxt(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;//利用setTokenWordFromTxt(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++文件操作

原创粉丝点击