#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <set>
#include <map>
#include <string>
#include <cctype> // isalpha, isupper, tolower
#include <cstdlib> / / Ausgang
verwenden Namensraum std;
static int s_lineNum = 1; // static Zeilennummer
int main (int argc, char * argv [])
{
if (argc <3)
{
cout << "Nutzung:" << argv [0] << "infile" << "outfile" << endl;
cout << „eine Wortliste von einem Englishfile generieren“
<< „jedes Wort wird durch die Anzahl der Linien gefolgt, wo sie aufgetreten und Ausgang dann die resultto einer Datei.“ << endl;
}
sonst
{
//gebräuchliche Worte
String commWord [13] = { "ein", "eine", "und", "sind", "in", "ist", "von",
"Oder", "das", "die", "das", "auf", "haben"};
set <string> ignorieren (commWord, commWord + 13); // ignorieren die commonwords
set <int> lineNum;
String-Wort; // das Wort aus infile extrahiert enthalten
Karte <string, set <int>> Wortliste; // assoziiertes Wort withlineNum
pair <map <string, set <int>> :: iterator, bool> pr;
map <string, set <int>> :: iterator itWord;
set <int> :: iterator itLine;
ifstream infile (argv [1]); // offene infile
if (infile.bad ())
{
cout << "open "<< argv [1] <<" error" << endl;
Ausfahrt (EXIT_FAILURE);
}
ofstream outfile (argv [2]);
if (outfile.bad ())
{
cout << "offen" << argv [2] << "Fehler" << endl;
Ausfahrt (EXIT_FAILURE);
}
char Temperatur;
while (infile.good ())
{
temp = infile.get (); // ein Zeichen bekommen
while (isalpha (temp))
{
if (isupper (temp))
{
temp = tolower (temp);
}
word.append (1, temp);
temp = infile.get (); // eine Newchar erhalten
}
// nicht gebräuchliches Wort und nicht leer
if (ignore.count (Wort) == 0 && word.size ()! = 0)
{
lineNum.insert (s_lineNum); // Einsatz der Zeilennummer in lineNum wenn es neues Wort isa
// ein Paar zurückgeben, die firstmember der Iterator ist, ist der zweite ein bool-Typ, die anzeigen, ob theinsertion erfolgreich ist oder nicht
pr = wordlist.insert (pair <string, set <int>> (Wort, lineNum));
// die Karte bereits enthalten anelement deren Schlüssel hatte einen äquivalenten Wert in der Reihenfolge
if (pr.second == false)
{
wordlist [word] .Insert (s_lineNum); // Einsatz der Zeilennummer in den setContainer mit dem Wort gepaart
}
}
word.clear ();
lineNum.clear ();
if (Temp == '\ n')
{
s_lineNum ++;
}
}
// itWord Punkte Paar <string, set <int>>, die firstmember Wort ist, ist die zweite Zeile Nummer
für (itWord = wordlist.begin ();! itWord = wordlist.end (); ++ itWord)
{
// Set Ausgabeformat
outfile.setf (ios_base :: links, ios_base :: adjustfield);
outfile.fill ( '-');
outfile.width (34);
outfile << itWord-> zuerst;
outfile << "„;
für (itLine = itWord-> second.begin (); itLine = itWord-> second.end ();! ++ itLine)
{
outfile << * itLine << ' ‚;
}
outfile << endl;
}
infile.close ();
infile.open (argv [2]);
cout << infile.rdbuf (); // streambuf, drucken Sie die Ausgabedatei
infile.close ();
outfile.close ();
}
map <int, string> ss;
ss.insert (pair <int, string> (6, "aa"));
ss.insert (pair <int, string> (4, "zz"));
ss.insert (pair <int, string> (5, "gg"));
map <int, string> :: iterator pt;
für (pt = ss.begin (!), pt = ss.end (); ++ pt)
{
cout << pt-> second << endl;
}
// System ( "PAUSE");
return 0;
}