#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;
}