Wörtervergleich mit set Container
-
Hallo, ich habe hier folgendes Problem:
Ich soll eine txt Datei mit irgendwelchen Wörtern auslesen und vergleichen welche dieser Wörter in meinem angelegten set Container, den ich vorher mit ein paar Wörtern gefüllt habe, gleich sind.
Mein Hauptproblem ist wie das in der txt Datei gehen soll dass ich z.B. den Textabschnitt "dies ist ein Test" Wort für Wort mit dem Inhalt des set Container vergleichen kann.
Für jegliche Hilfe oder Kommentare bin ich dankbar.
-
Die normalen File-Streams geben über den <<-Operator immer nur ein Wort ab. Alternativ kannst du auch getline (datei, wort, ' '); aufrufen.
-
Ich habe den set Container mit Wörtern gefüllt, die in der eingelesenen txt Datei enthalten sind. Aber wie vergleiche ich die jetzt?
#include <iostream> #include <stdlib.h> #include <set> #include <fstream> #include <string> using namespace std; int main() { typedef set <string> Set; typedef Set::iterator Iterator; Set str; Iterator j; char buffer [1024]; str.insert("umgehen"); str.insert("kann"); str.insert("ausgegangen"); str.insert("davon"); str.insert("einzelnen"); str.insert("entwickeln"); str.insert("werden"); str.insert("eigentlich"); str.insert("gefiltert"); str.insert("kostbare"); for (j = str.begin(); j != str.end(); j++) cout << *j << endl; cout << endl; ifstream fin("uebung9.txt"); while (! fin.eof()) { fin.getline(buffer,100); cout << buffer; } cout << endl << endl; system("pause"); return 0; }
-
int main () { // blabla -char buffer[1024] // btw, die Benennung des set ist irreführend!!! // einfügekrams while (!fin.eof ()) { std::string s; fin >> s; if (str.find (s) != str.end ()) do_apocalypse (); // oder was auch immer } }Oder auch ganz tricky (aber wahrscheinlich nicht SOO effektiv :D, außerdem hab ichs nicht ausprobiert):
Set file (std::istream_iterator<std::string> (fin), std::istream_iterator<std::string> ()); Set result; std::set_intersection (str.begin (), str.end (), file.begin (), file.end (), result.begin ());Dann ist (hoffentlich) result die Schnittmenge von file und str.
-
Ich habe noch einige Verständnisfragen. Siehe Kommentare im Code
while (!fin.eof()) { std::string s; //Warum muss hier der Namensraum angesprochen werden? fin >> s; //Liest fin jeweils ein Wort in den String ein? if (str.find (s) != str.end ()) //Wenn der String im Container gefunden wurde (also true) und das zeilenende noch nicht erreicht wurde gebe den string aus :confused: cout << s << " ist im Container enthalten." << endl; }
-
1. Das mit dem Namensraum ist unwichtig, is halt Gewohnheit.
2. Ja
3. Zeilenende? Davon hast du nichts gesagt.