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 
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 
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 
Grüße
CMБ
Viele Grüße,
Brutus
Hi,
wenndann die schöne C+±Lösung ohne dumme char-Arrays 
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