String zerlegen
-
Hallo.
Ich versuche mich grade ein wenig in die MFC mit VC++ einzuarbeiten und habe ein Problem damit, einen Sting zu zerlegen. Die Suchfunktion war leider auch nicht ergiebig.
Es soll ein Text in ein Eingabefeld geschrieben werden. Die einzelnen Teile dieses Textes sind durch einen Seperator ( Semikolon bietet sich wohl an ) getrennt. Der String soll an diesen Stellen getrennt und und in eine Variable mit Array geschrieben werden um hinterher in Deierblöcken ausgegeben zu werden.
Ich glaube ich mache zum besseren Verständnis mal ein Beispiel.
Eingegebener TextSatz 1;Satz 2;Satz 3;Satz 4;usw.
Die ausgabe sieht hinter dann so aus:
1. Satz 1
2. Satz 2
3. Satz 31. Satz 4
2. ...Bisher habe ich es nur als Konsolenanwendung geschafft, wenn ich den text aus einem Dokument geholt habe.
while ( doc.eof()==false ) // ich weiß eof ist decreased. Ich habs aber so gelernt { getline ( doc, s_text, ';'); i++; s_textzw[i]=s_text; } for ( j=0 ; j<=i ; j+3 ) { s_ausgabe=s_ausgabe+"1. "s_textzw[j]+"\n2. "+s_textzw[j+1]+"\n3. "+s_textzw[j+2]+"\n\n"; }
Kann mir jemand helfen, wie ich das umsetze um in der MFC den String zu zerlegen?
DANKE für die Hilfe.
-
-
Danke für die Antwort aber gibt es dafür auch eine Möglichkeit, die ein völliger Anfänger wie ich auch versteht?
Es muß doch soetwas wie:while(String einlesen != Stringende)
{
Funktion;
}Halt genauso wie in der von mir beschiebenen Konsolenanwendung. Nur halt auf einen String bezogen.
-
Mit Left() Right() und Find() ?
-
Hi,
versuchs mal so.
Die Funktion für´s zerlegen.
Der Rückgabewert ist immer der Text bis zum Trennzeichen.CString CPdfView::SplitString(char cTrennzeichen, CString &text) { CString tmp; int index = text.Find(cTrennzeichen); if ( index >= 0 ) { tmp = text.Left(index); text.Delete(0, index+1); } else { tmp = text; text = ""; } return tmp; }
Aufrufen könnte man es z.B. so:
void CPdfView::OnDatZerlegen() { CString meinSatz = "Satz1 ; Satz 2; Satz 3; Satz 4" CString tmp; CString satz[3]; for (int i=0; i<5; i++) { tmp = SplitString( ';', meinSatz); satz[i] = tmp; } CString m_satz1 = satz[0]; // Inhalt "Satz 1" CString m_satz2 = satz[1]; // Inhalt "Satz 2" CString m_satz3 = satz[2]; // Inhalt "Satz 3" CString m_satz4 = satz[3]; // Inhalt "Satz 4" }
Geht bestimmt auch eleganter, ist aber mal ein Ansatz mit dem Du bestimmt weiter kommst.
Grüsse Sven
-
Danke für die Antwort aber gibt es dafür auch eine Möglichkeit, die ein völliger Anfänger wie ich auch versteht?
Völlige Anfänger kommen nur weiter, wenn sie sich etwas erarbeiten. Andernfalls bleiben sie Anfänger.
Ich hoffe, Du siehst zumindest so etwas sofort:
CString satz[3]; // Platz für 3 Elemente im Array.
satz[0] bis satz[3], also 4 Elemente im Array!
Die Schleife läuft sogar bis satz[4].
http://www.cpp-tutor.de/cpp/le06/le06_01.htm
-
Sorry! Ich hab´s aus meinem Programm rauskopiert und etwas schlampig angepast.
Da hast Du recht.
Völlige Anfänger kommen nur weiter, wenn sie sich etwas erarbeiten. Andernfalls bleiben sie Anfänger.