/*我在这里写下部分C++ Primer 中文版 第4版 习题的个人解答和看法(注:我没有买答案书,所以不保证正确,你觉得错的,希望你能告诉我)源代码运行的要求和书上一样,省略了预编译和using行。假如有什么说的不详细,你还不懂,可以问我,不过我也是初学者,不一定知道阿,看我还在学C++ Prime 就知道我是初学者了。欢迎转载,但是请保留作者名“九天雁翎”。*/
//一个单词查询程序,就算不是做题目,实际的代码在使用上也有一定的意义
int main(int argc, char *argv[])//agrv[1]为要查询单词,agrv[2]为查询文件
{
if(argc!=3)//检查参数数目
{
cerr<<"error:wrong argment number.First was the word,second the file name.";
return -1;
}
ifstream ifile;
ifile.open(argv[2]);
if(!ifile)//检查文件打开情况
{
cerr <<"error:unable to open input file: "<<argv[2]<<endl;
return -1;
}
string line,word;
map<string,int> wordCount;
while(getline(ifile,line))
{
istringstream isstream(line);
while(isstream >>word)//读入每个单词
{
++wordCount[word];
//T10.12的形式就是把上面一句注释掉,把下面的注释去掉,当然是第一种方便
/*pair<map<string,int>::iterator,bool> ret =
wordCount.insert(make_pair(word,1));
if(!ret.second)
++ret.first->second;*/
}
}
ifile.close();
cout<<"the "<<argv[1]<<" occor "<<wordCount[argv[1]]
<< ( (wordCount[argv[1]] > 1 ) ? " times" : " time" ); //输出,最后用一个?:操作来输出正确的复数形式
return 0;
}
//最后这个程序的问题在于单词的统计使用了C++ Primer书中提供的常用方法,完全按空格区分,没
//有办法区分数字,标点等对单词的影响,暂时还想不到简单的办法,思路都很复杂,要应对各样的
//情况,比如光查标点会让It's等缩写产生问题,有知道方法的,请留言告诉我啊:)就我所知,就
//算是C++ Primer书中提供的一个TextQuery程序(10.6.3)也存在同样的问题。