C ++ indexée selon le texte



#include "stdafx.h"
#include <iostream>
#include <fstream> 
#include <set> 
#include <map> 
#include <string> 
#include <cctype> // isalpha, isupper, tolower 
#include <cstdlib> / / sortie 


using namespace std; 


static int s_lineNum = 1; // statique linenumber  


int main (int argc, char * argv []) 

if (argc <3) 

Cout << "utilisation:" << argv [0] << "infile" << "outfile" << endl; 
Cout << « générer une liste de mots d'un Englishfile, » 
<< « chaque mot est suivi par le nombre des lignes où elle a eu lieu, puis la sortie du resultto un fichier. » << endl; 

autre 

//Mots communs 
chaîne commWord [13] = { "a", "une", "et", "sont", "in", "est", "dans",  
"Ou", "que", "le", "ce", "à", "avoir"}; 


set <string> ignorer (commWord, commWord + 13); // ignorer les commonwords 
set <int> lineNum; 
mot de chaîne // contiennent le mot extrait de infile 
carte <string, set <int>> wordlist; // associé mot withlineNum 
paire <map <string, set <int>> :: iterator, bool> pr; 
carte <string, set <int>> :: iterator itWord; 
set <int> :: iterator itLine; 


ifstream infile (argv [1]); // infile ouvert 
if (infile.bad ()) 

Cout << "open "<< argv [1] <<" erreur" << endl; 
exit (EXIT_FAILURE); 



ofstream outfile (argv [2]); 
if (outfile.bad ()) 

Cout << "open" << argv [2] << "erreur" << endl; 
exit (EXIT_FAILURE); 



température de carbonisation; 
tandis que (infile.good ()) 

temp = infile.get (); // obtenir char 
tandis que (isalpha (temp)) 

if (isupper (temp)) 

temp = tolower (temp); 

word.append (1, temp); 
temp = infile.get (); // obtenir un newchar  

// pas mot commun et non vide 
si (ignore.count (mot) == 0 && word.size ()! = 0) 

lineNum.insert (s_lineNum); // insérer le numéro de ligne dans lineNum si elle isa nouveau mot 
// retourne une paire, la firstmember est le iterator, le second est un type bool qui indique si theinsertion est réussi ou non 
pr = wordlist.insert (paire <string, ensemble <int>> (mot, lineNum)); 
// la carte contient déjà unElement dont la clé avait une valeur équivalente dans la commande 
si (pr.second == false) 

.insert liste de mots (s_lineNum) [mot]; // insérer le numéro de ligne dans la setContainer apparié avec le mot 
}                

word.clear (); 
lineNum.clear (); 
si (temp == '\ n') 

s_lineNum ++; 




// itWord points paire <string, set <int>>, le mot est firstmember, le second est le numéro de ligne  
pour (itWord = wordlist.begin ()! = itWord wordlist.end (); ++ itWord) 

// Définir le format de sortie 
outfile.setf (ios_base :: gauche, ios_base :: adjustfield); 
outfile.fill ( '-'); 
outfile.width (34); 
outfile << itWord-> d'abord;
outfile << " « ; 


pour (itLine = itWord-> second.begin (); itLine = itWord-> second.end ();! ++ itLine) 

<< * outfile itLine << ' « ; 

outfile << endl; 



infile.close (); 
infile.open (argv [2]); 
Cout << infile.rdbuf (); // streambuf, imprimer le fichier de sortie 
infile.close (); 
outfile.close (); 

carte <int, string> ss;
ss.insert (pair <int, string> (6, "aa"));
ss.insert (pair <int, string> (4, "zz"));
ss.insert (pair <int, string> (5, "gg"));
carte <int, string> :: iterator pt;
pour (pt = ss.begin (!); pt = ss.end (); ++ pt)
{
Cout << PT-> << deuxième endl;


}




// système ( "pause"); 
return 0; 
}
Publié 12 articles originaux · louange gagné 6 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/huaweizte123/article/details/51761261
conseillé
Classement