Probleme mit Öffnen von Datei + Frage zu Maps und Vektoren
-
Hallo!
Ich hätte zwei Fragen. Die erste betrifft das Öffnen von Dateien.
Mir ist klar, wie das geht. Man macht ja z.B.ifstream datei; datei.open("beispiel.txt", ios_base::in);und kann dann mit dieser Datei arbeiten. Wie geht das aber, wenn ich eine Datei in einer Funktion öffnen möchte, und den Dateinamen als Parameter an die Datei übergebe? Also so in etwa:
int dateiAuslesen(string dateiname) { ifstream datei; datei.open(dateiname, ios_base::in); return 0; }Hier streikt der Compiler. Wie schaffe ich es, dass das klappt?
Ok, dann noch eine zweite Frage, die Maps und Vektoren betrifft.
Angenommen ich deklariere folgende Funktion:
map<string, int> ii (vector<string>& number);Wie schaff ich es, dass der Inhalt des Vektors in die Map "kopiert" wird, damit ich z.B. Wörter zählen kann?
Danke für jede Antwort!
-
Zu Frage 1:
open braucht (leider) ein nullterminiertes char-Array als Argument. Das bekommst du damit aus dem String:
http://www.cplusplus.com/reference/string/string/c_str/Zu 2:
Ich verstehe nicht, was du genau willst. Du hast einen vector<string> und möchtest den Inhalt in eine map<string, int> übertragen? Welcher int soll denn dann zu welchem string gehören?
Allgemeine Vorgehensweise sit aber: Schleife über die Vektorelemente laufen lassen und in die map einfügen.Was soll das mit Wörterzählen zu tun haben?
-
void open ( const char * filename, ios_base::openmode mode = ios_base::in );passt wohl nicht ganz mit std::string zusammen.
std::string bietet ne Memberfunktion die das Problem behebt.
Edit: SeppJ war schneller
-
Danke erstmal für die Antworten!
Die Funktionen so wie sie hier stehen, also auch mit dem string als Parameter, ist so leider in meiner Aufgabe vorgegeben. Aber ich probier das mal mit dem const char*.
Zu der Sache mit den Maps: Ich habe den Inhalt einer Datei in diesen Vektor gespeichert. Und nun soll ich mit der angegebenen Funktion die Häufigkeiten aller im Vektor vorkommenden Wörter ermitteln. Und genau das ist das Problem. Ich weiß nicht, wie man das in die Map kopiert bzw. wofür das int genau steht.

-
Wenn ich mal deine Aufgabe interpretieren darf (hoffentlich richtig):
Ddu weißt hoffentlich, was eine map macht. Falls nicht, musst du dir das jetzt anlesen, sonst verstehst du das folgende nicht. Du sollst in einer Schleife alle Vektorelemente durchgehen. du prüfst ob schon eine Mapeintrag für den Vektoreintrag vorhanden ist. Falls nein, dann legst du einen passenden Mapeintrag an und setzt den int auf 1. Falls doch, dann erhöhst du den int um 1. Bist du alle Elemente durchgegangen stehen in der map alle Wörter und zu jedem Wort ein int der angibt, wie oft das Wort in der Datei vorkommt.
-
@Sepp, du hast das absolut richtig interpretiert
Ich habe das Konzept mit den Maps gestern zum ersten mal überhaupt gesehen und dachte, das seien Container, die im Prinzip wie Vektoren behandelt werden können. Daher habe ich angenommen, dass ich die Vektorelemente erstmal kopieren muss. Aber so wie du das erklärt hast macht das natürlich deutlich mehr Sinn. Ich danke dir vielmals. Jetzt muss ich nur schauen, dass ich das in 4 Stunden hinkriege 