您的位置:首页 > 编程语言

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

2012-04-19 13:31 113 查看
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*

/article/4798553.htmlC++文件操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: