通过这个小程序,使我对map,set,fstream 类的使用有所熟悉.
程序摘自《essential c++》,我加了注释.
#include
<
map
>
#include
<
set
>
#include
<
string
>
#include
<
iostream
>
#include
<
fstream
>
using
namespace
std;

void
initialize_exclusion_set(
set
<
string
>&
);
//
初始化set容器,把要排除在外的单词插入其中
void
process_file(map
<
string
,
int
>&
,
const
set
<
string
>&
,ifstream
&
);
//
从input.txt文件中读取单词,若单 词未在
set容器中出现过,将其置为map容器中的关键字key,并使相应key的value自加1,
否则读取下一单词,以空格为分界符
void
user_query(
const
map
<
string
,
int
>&
);
//
用户控制台,用户输入search_word,若在map中存在则打印key与相应value值
void
display_word_count(
const
map
<
string
,
int
>&
,ofstream
&
);
//
输出map中的所有key与其相应的value值于output.txt中
int
main()

...
{
ifstream ifile("G:/input.txt");
ofstream ofile("G:/output.txt");

if(!ifile||!ofile)

...{
cerr << "Unable to open file!!! ";
return -1;
}

set<string> exclude_set;
initialize_exclusion_set(exclude_set);

map<string,int> word_count;
process_file(word_count,exclude_set,ifile);
user_query(word_count);
display_word_count(word_count,ofile);

return 0;
}

void
initialize_exclusion_set(
set
<
string
>&
exs)

...
{

static string _exclude_words[5]=...{
"the","a","and","an","are"
};

exs.insert(_exclude_words,_exclude_words+5);
}

void
process_file(map
<
string
,
int
>&
word_count,
const
set
<
string
>&
exclude_set,ifstream
&
ifile )

...
{
string word;
while(ifile>>word)

...{
if(exclude_set.count(word))
continue;
word_count[word]++;
}
}

void
user_query(
const
map
<
string
,
int
>
&
word_map)

...
{
string search_word;
cout << "Please enter a word to search : q to quit ";
cin>>search_word;
while(search_word!="q")

...{
map<string,int>::const_iterator it;
if((it=word_map.find(search_word))!=word_map.end())
cout << "Found! "<<it->first
<< " occurs "<<it->second
<< " times. ";
else cout<<search_word
<<" was not found in text. ";
cout<<" Another search?(q to quit)";
cin>>search_word;

}
}

void
display_word_count(
const
map
<
string
,
int
>
&
word_map,ofstream
&
os)

...
{
map<string,int>::const_iterator
iter=word_map.begin(),
end_it=word_map.end();
while(iter!=end_it)

...{
os<<iter->first <<"("
<<iter->second<<")"<<endl;
++iter;
}

os<<endl;

}

