Zerteilen eines Strings in mehreren Abschnitten zu einer URL !



  • Hallo,

    ich hab da ein Prob mit dem Zerteilen eines Strings.

    Erstmal zu dem was ich machen möchte :
    Ich möchte eine URL auf die 3 'w's prüfen, wenn die gefunden worden sind
    soll alles davor gelöscht werden

    Beipsiel: http://www....
    Dann soll http:// abgeschnitten werden.

    Wenn das getan ist, soll die URL auf die Endung überprüft werden. (.de/.org/.com/.ru etc.) Und ebenfalls soll der Rest ab dort an abgeschnitten werden. Um das alles nochmal zu verdeutlichen habe ich hier ein kleines Beispiel gemacht :

    http://www.Test.de/?php?=pjatsss.php?mode=oldtopic&f=1
    
    // Diese URL soll dann so aussehen
    
    www.Test.de
    

    Nun zu meiner angefangenen Lösung:
    Ich dachte mir das kann man mit CString::Find() & Delete() & Left/Right & ReverseFind() lösen. Doch das geht nicht, da man bei ReverseFind zum Bsp.: keine 3 Buchstaben suchen kann, immer nur ein einzigen. Damit wäre das Problem schonmal erleutert...

    Wäre froh über jede Antwort...

    Danke
    K2theB



  • hi,

    warum willst du überhaupt ReserveFind() benutzen? 😕
    Es ist doch möglich es mit Find() zu lösen 😉



  • Hmm, also ich hab es jetzt geschafft das 'http://' abzutrennen. Doch wie kann ich nun alles ab .de/.org/.com/.ru etc. abtrennen ?

    Danke
    K2theB



  • Dann nimm wieder Find() und suche in deinem CString nach dem ersten '/'. Dadurch bekommst du die (Anfangs-)Position ab der du dann alles löschen kannst. 🙂



  • Hmm, aber wie kriege ich denn die Position ab '/' .. ?

    for(int i = 0; i < strEURL.GetLength(); i++)
    {
       if(strEURL.Find('/') == i)
       {
          // Und jetzt ?
       }
    }
    

    Wie soll ich weitermachen wenn '/' gefunden wurde ?

    Danke
    K2theB



  • So, wie ich es meine, benötigst du keine for-Schleife.

    Ich dachte an diese Möglichkeit(ist nicht getestet):

    {
    int pos_sign=0,
        length=0;
    //...
    
    length = strEURL.GetLength();
    pos_sign = strEURL.Find('/', 0);            //oder strEURL.Find('//', 0) - musst du testen
    
    if(pos_sign != -1)
     strEURL.Delete(pos_sign, length-pos_sign);
    
    //...
    }
    

    ist es jetzt ein wenig klarer, wie ich es gemeint habe? 😉
    Wie hast du das 'http://' entfernt? 😕



  • Also so habe ich das "http://" entfernt

    CString strEURL;
    	GetDlgItemText(IDC_EDIT1, strEURL);
    
    	for(int i = 0; i < strEURL.GetLength(); i++)
    	{
    		if(strEURL.Find("http://") == i)
    		{			
    			strEURL.Replace("http://", "");
    			SetDlgItemText(IDC_EDIT1, strEURL);			
    		}		
    	}
    

    Ist zwar ein bissl' umständlich aber es funktioniert 😃
    Doch ich hab immernoch Probleme mit deinem Code 😞
    Funktionieren tut er leider nicht, und ich muss sagen langsam wird die MSDN zu meinem besten Freund 😃 🤡
    Doch Hinweise zur Lösung konnte ich dort nicht finden...

    K2theB



  • was für Probleme sind das denn? Hab den Code bei mir getestet und er funktioniert ⚠

    Gut, du kannst es mit Replace() lösen, aber auch mit Delete(). Ich bevorziehe da lieber Delete()...

    Aber noch ein Tipp: 💡 auch hier benötigst du keine Schleife 💡

    :xmas2: :xmas2:


Anmelden zum Antworten