Aufsplitten des Inhaltes einer char-Variable



  • Hallo,

    Wie kann ich aus einer char-Variable nach dem Vorkommen eines bestimmten Zeichens suchen. Dieses Zeichen dient als Trennzeichen, ich möchte eine Position zurück geliefert bekommen um dann den Inhalt der char-Variable komplett nach diesem Zeichen aufsplitten zu können.

    Bsp. :

    Inhalt der char-Variable: bla;blupp;blöd;

    Nun möchte ich immer nach dem Semikolon trennen, jeder einzelne Wert auslesen. In C++ habe ich dies bereits einmal gelöst, funktioniert aber in MFC nicht, wie muss ich dort vorgehen ?

    Danke !

    mfg
    Petrow



  • Hi,

    MFC ist nichts anderes als C++ (nur ein paar zusätzliche Wrapperklasse) 😉
    => Dein C++ Code müsste auch funktionieren

    Ich habe dir ein Beispielcode geschrieben (ist aber ziemlich unsauber).
    (Ich bin davon ausgegangen, dass nach dem letzten Element (in deinem Beispiel: "blöd") kein Trennzeichen mehr folgt):

    void CTestDlg::OnButton1()
    {
    	CString strText = "bla;blupp;blöd";
    	char cSeperator = ';';
    	int nCurrentPos = 0;
    
    	if(strText.IsEmpty()) return;
    
    	nCurrentPos = strText.Find(cSeperator);
    
    	/* 1. Teil parsen */
    	if(nCurrentPos == -1)
    	{
    		// nur ein Element vorhanden
    		CString strElement = strText;
    		MessageBox("Nur ein Element: "+strElement);
    	}
    	else
    	{
    		// 1. Element parsen
    		CString strElement = strText.Mid(0, nCurrentPos);
    		MessageBox("Element 1: "+strElement);
    	}
    
    	/* in einer Schleife die restlichen Elemente parsen */
    	while((nCurrentPos = strText.Find(cSeperator, nCurrentPos)) != -1)
    	{
    		nCurrentPos++; // das Trennzeichen muss weggeschnitten werden
    		int nNextPos = strText.Find(cSeperator, nCurrentPos);
    		if(nNextPos != -1)
    		{
    			// neues Element gefunden (noch nicht das Letzte)
    			CString strElement = strText.Mid(nCurrentPos, nNextPos - nCurrentPos);
    			MessageBox("Element gefunden: "+strElement);
    		}
    		else
    		{
    			// letztes Element, da kein Trennzeichen mehr folgt
    			CString strElement = strText.Mid(nCurrentPos);
    			MessageBox("Letztes Element: "+strElement);
    		}
    	}
    }
    

    Grüße Rapha



  • Hallo,

    Gibt es eine Möglichkeit alle Semikolons aus einem CString herauszusuchen, also es reicht die Anzahl. Gibt es da kurze einfache Möglichkeiten ?



  • Lauf den String durch und zähl die ;. 🙄

    int Anzahl = 0;
    char String[] = "blah; bla; blub;";
    
    for (int zaehler = 0; zaehler < strlen(String); zaehler++)
        if (String[zaehler] == ';')
             Anzahl++;
    

    🙄



  • Hallo,

    wende Replace auf den betreffenden CString an (Replace gibt die Anzahl der Ersetzungen zurück):

    CString strText("string;mit;semikolon");
    
    int iAnzSemikolon = strText.Replace(";", ";");
    

    MfG


Anmelden zum Antworten