wörterbuch in Map speichern

Hallo,
ich habe ein Problem beim Speichern von Wörtern in einer Map.

Die wörter lade ich aus einer Datei und verwende sie als Schlüssel für die Map.

 char str[255];
 map worte;
 map::iterator pwort;
 ifstream in("words.txt");
 if(!in)
 {
 cout (str,"TEST"));
// cout first second

ich bekomme immer die Meldung "wort nicht gefunden", obwohl das wort enthalten ist.
Wenn 'pwort=worte.begin();' auskommentiere, ist bekomme ich folgende Ausgabe:


     : TEST


obwohl dort folgendes stehen müßte


    INIT01 : TEST



Ich befürchte, dass das mit den Zeigern nicht funktioniert.

Wer kann mir einen Tip geben?

Weil Formatierungen in Quotes nicht gehen heute mal anders:

 char str[255];
 map worte;

Ungefähr an dieser Stelle weiss ich, was nicht funktioniert.

 in.getline(str,255);
 worte.insert(pair(str,"TEST"));

Sag mir genau, was jetzt in die map eingetragen wird und mit

 pwort=worte.find("INIT07");

an find() übergeben wird.

Ich befürchte, dass das mit den Zeigern nicht funktioniert.

Gute Idee. Tipp: char* ist böse, wenn du keine Anwendungen für extrem eingeschränkte Systeme (Stichwort: embedded) schreibst. Dafür gibt es std::string, das löst all deine Probleme und dann noch ein paar, die du noch nicht gesehen hast.

Hi,

es geht auch ohne dieses insert pair usw.

map liste;
liste[„Hallo“] = „Hello“;
liste[„Welt“] = „World“;

Vielleicht bringts was :wink:

bye,
Christoph

Hallo, ich konnte das Problem eingrenze, aber leider nicht lösen.
In der map verwende ich nun string statt char.
Das komische ist, dass in der while-Schleife alles funktioniert, aber nach der Schleife nicht mehr.

 map worte;
 map::iterator pwort;
 ...
 while(in)
 {
 in.getline(str,255);
 string st=string(str);
 worte.insert(pair("","TEST"));
 pwort=worte.begin(); 
 coutfirstfirst

Bei der Testdatei mit folgendem Inhalt 


    
    Wort1



bekomme folgende Ausgabe


    
    in der Schleife : 
    nach der Schleife : 




Wo ist das Wort 'Wort1' hin, und warum sind die spitzen Klammern noch da.
Wer kann mir sagen, wie ich das Problem umgehen/lösen kann?

Hallo brutus

map worte;
map::iterator pwort;

while(in)
{
in.getline(str,255);

ist u.U. falsch. Versuch mal

 while(!in.eof())

oder sowas.

Oder noch besser, mach mal aus dem

 in.getline(str,255);

ein

 assert( in.getline(str,255) != NULL );

(vorher #include ).

Dann siehst Du was los ist :wink:

Grüße

CMБ

Danke für den Tip mit dem assert (ES LÄUFT JETZT)
Es läuft jetzt. Ich habe die while-Schleife folgendermaßen geändert.

while(in.getline(str,255)!=NULL){..}

Hallo brutus

map worte;
map::iterator pwort;

while(in)
{
in.getline(str,255);

ist u.U. falsch. Versuch mal

while(!in.eof())

funktionierte auch nicht

oder sowas.

Oder noch besser, mach mal aus dem

in.getline(str,255);

ein

assert(
in.getline(str,255) != NULL );

(vorher #include
).

das mit dem assert kannte ich bisher noch nicht. Ist echt sehr Hilfreich. Danke!

Dann siehst Du was los ist :wink:

Grüße

CMБ

Viele Grüße,
Brutus

Hi,

wenndann die schöne C+±Lösung ohne dumme char-Arrays :wink:
Desweiteren glaub ich, dass insert() dein letztes Element vorne einhängt. Somit kann wenn dein getline (so wie’s vorher war) fehlgeschlagen hat dein str=="" sein - erklärt warum du „“ als Ausgabe hattest.

string line;
map worte;
map::iterator pwort;
...
while( getline(in, line) )
{
 worte.insert(pair("","TEST"));
 pwort=worte.begin();
 coutfirstfirst

bye,
Christoph