一个简陋的文字计数器

通过这个小程序,使我对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;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值