Ich bin am Ende! CString in while-schleife!
-
Hi,
ich hoffe ihr könnt' mir helfen. Ich bin mit meinem Latein am Ende. Habe eine MFC-Dialogbox erstellt mit 2 Eingabefenstern. Eingabefenster zeigt auf den CString Eingabe und das Ausgabefenster zeigt auf den CString Ausgabe.
Das Programm läuft soweit ganz gut, als Test lasse ich mir den eingegebenen Text gleich im Ausgabefenster ausgeben.
Nun soll das Programm aber auch noch bei jeder neuen Eingabe die Häufigkeit der Buchstaben realisieren.
Ich habs so versucht zu lösen (in der OnChangeEingabe):
int x=0; // Laufvariable int h[256]; // Feld welches die Häufigkeiten nach ASCII sortiert enthält for (x=0;x<256;x++) // resetet das Feld auf 0 {h[x]=0;} x=0; while(Eingabe[x]!=NULL) {h[Eingabe[x]]++; x++}Es muss eindeutig an dem CString liegen, da das Program in einer Konsolenanwendung mit char[] als String funtioniert. Habs auch schon mit Eingabe.GetAt(x) probiert, aber das hilft auch nichts.
CU

-
Hi,
schließt ein CString mit einer 0 ab?
Ich würde es so machen:
while(Eingabe.GetLength() > x)MFG
Kai[ Dieser Beitrag wurde am 25.06.2003 um 12:59 Uhr von KaiE editiert. ]
-
Hi,
Gibts irgendwie einen Ersatzausdruck dafür?
Das mit dem Eingabe.GetLength() werde ich mal ausprobieren.
Danke
CU

-
Es funktioniert. Ja es funktioniert. Hipi.
Ich könnt' dich ...
CU

-
Class CString Memberfunc. IsEmpty()
-
was willst du ihm damit sagen?
-
Statt
Eingabe[x]!=NULL)
EIngabe[x].IsEmpty()
-
Hm?
[ Dieser Beitrag wurde am 26.06.2003 um 22:03 Uhr von Unix-Tom editiert. ]
-
Von char steht hier nichts.
Eingabe soll ein CString sein.
Eingabe.GetLength() würde ja dann auch nicht auf char gehen.
-
EIngabe[x].IsEmpty()
Von char steht hier nichts.
Eingabe soll ein CString sein.
Eingabe.GetLength() würde ja dann auch nicht auf char gehen.Eingabe[x].GetLength() wird wohl auch nicht funktionieren.
-
Da hassu was missverstanden.
Bei deiner Version müsste es sich um einen Container für CStrings handeln.
Aber die variable eingabe ist selbst ein CString. Da wurde ja wie du weisst der []-operator überladen. Sodass du somit auf die einzelnen Zeichen zugreifen kannst. Ein char ist aber ein elementarer Datentyp und hat also auch keine IsEmpty()-methode.Es funktioniert ja jetz sowieso. Aber er hätte auch einfach eingabe+='\0';
schreiben können under restliche Code wäre unverändert geblieben.
-
-
So, guten morgen!
Danke für das viele Feedback. Wie schon gesagt, war der Quelltext aus einer Konsolenanwendung ohne MFC, aber ich musste ich nun für ein Projekt zur Textanalyse mit anschliessender Kodierung umschreiben.
Eingabe[x]!=NULL hatte nur überprüft, ob der String an der Stelle x ein Zeichen enthält. Wenn nicht, wäre die Schleife am Ende des Strings angekommen und die Schleife hätte abgebrochen.
Mit Eingabe.Getlength() funktionierts wunderbar.
Vielen Dank nochmal
CU

-
Original erstellt von dEUs:
**Hm?
]**
Wieso sollte das so sein.
CString Eingabe[20]; Eingabe[0] = _T("Hallo")Und wo ist jetzt der char ?
-
Ähm UnixTom ??
Er verwendet doch kein CString-Array! Eingabe ist ein einfacher CString und bei normalen CStrings gibt der []-op eben nen char zurück!
-
Eigentlich eh egal. Ich wollte nur aufzeigen das es zum Mißverständnissen kommen kann wennn man nur Codebrocken hinwirft ohne z.B zumindest die Variablendeklaration auch zeigt.
-
ahso *g*
Dann sag das doch früher
-
CString Eingabe[20];
Eingabe[0] = _T("Hallo")Das wirds dir um die Ohren hauen.
Eingabe[0] ist gleichbedeutend mit Eingabe.GetAt(0). Hier wird keine Referenz zurückgeliefert.
Falls es wirklich gehen würde könntest du danach die Adresse vom 'H' aus "Hallo" in Eingabe[0] abrufen. Also auch nicht der gewünschte Effekt.
-
Original erstellt von Kauz01:
[quote]CString Eingabe[20];
Eingabe[0] = _T("Hallo")**
Das wirds dir um die Ohren hauen.
Eingabe[0] ist gleichbedeutend mit Eingabe.GetAt(0). Hier wird keine Referenz zurückgeliefert.
Falls es wirklich gehen würde könntest du danach die Adresse vom 'H' aus "Hallo" in Eingabe[0] abrufen. Also auch nicht der gewünschte Effekt.**[/QUOTE]

Schon versucht ?
Ich schon !
-
Kauz: Das ist Quatsch!
-
Hast recht. Was in meinem letzten Beitrag steht ist Quatsch. Ich hab mich aufs Glatteis führen lassen. Am Anfang dieses Threads hieß es:
Eingabefenster zeigt auf den CString Eingabe
und Eingabe wurde als CString angegeben. Ich glaub es war Unix-Tom, der dann als erster die Deklaration "CString Eingabe[20]" brachte. Eigentlich als Hinweis, dass der Anfang missverständlich war, da die Deklaration fehlte
.
Ich hab nur am Anfang aufgepasst und nicht gesehen, dass das inzwischen für ein Feld steht.
Btw. Jetzt könnte man mal wieder darüber streiten, ob man Missverständnisse vermeiden kann, wenn man
"CString strEingabe" statt "CString Eingabe" schreibt.
Ich glaube im MFC-Forum hatten wir das noch nicht.[ Dieser Beitrag wurde am 28.06.2003 um 10:10 Uhr von Kauz01 editiert. ]