C++第五次上机作业(提高)

C++第五次上机作业(提高)

 

#include < iostream >
#include
< sstream >
#include
< map >
#include
< string >
#include
< vector >
#include
< iomanip >
#include
< fstream >
#include
< algorithm >
using namespace std;
typedef map
<   string  , vector < int >   >  WORD;
void init ( WORD 
&  m )
{
 ifstream fin;
 fin.open(
" keywords.txt " );
    
string  keyword;
    
while  ( fin >> keyword )
        m[keyword];
 fin.close();
}
void count ( WORD 
&  m )
{
    
int  line = 0 ;
 ifstream fin;
 fin.open(
" text.txt " );
    
string  str;
    
while  ( getline(fin,str) )
    {
  line
++ ;
  
for  ( WORD::iterator iter  =  m.begin () ; iter! = m.end( ); iter ++  )
   
if  ( str.find ( iter -> first )! = string ::npos )
    m[iter
-> first].push_back(line);
    }
 fin.close();
}
void only( WORD 
& m )
{
 
for  ( WORD::iterator i = m.begin() ; i! = m.end(); i ++  )
 {
  vector
< int > ::iterator  new_end = unique(i -> second .begin(),i -> second .end());   
  i
-> second .erase(new_end,i -> second .end());   
 }
}
void sort_list ( WORD m , map
< int , string >   & mm )
{
 
for  ( WORD::iterator iter_m  =  m.begin() ; iter_m ! =  m.end() ; iter_m ++  )
  mm[iter_m
-> second  .size ()] = iter_m -> first; 
}
void output ( WORD m , map
< int , string >  mm )
{
    
string  keyword;
 
for  ( map < int , string > ::reverse_iterator iter = mm.rbegin() ; iter! = mm.rend() ; iter ++  )
    {
        cout
<< setw( 10 ) << iter -> second << " : "
            
<< " ( " ;
  
for  ( vector < int > ::iterator iter_vector = m[iter -> second ].begin() ; iter_vector! = m[iter -> second ].end(); iter_vector ++  )
        {
            
if  ( iter_vector! = m[iter -> second ].begin() )
                cout
<< " , " ;
            cout
<<* iter_vector;
        }
        cout
<< " ) " << endl;
    }
}
int  main  ()
{
    WORD m;
 map
< int  ,  string >  mm;
    init(m);
    count(m);
 sort_list(m,mm);
 only(m);
    output(m,mm);
}

你可能感兴趣的:(C++第五次上机作业(提高))