Kopieren von substrings



  • Hallo leute,

    hoffe ihr könnt mir helfen 🙂

    suche einen algorithmus der mir einen bestimmten Teil eines Strings kopiert.

    Dabei sucht es nach einer bestimmten zeichenkette und kopiert den nachstehenden text in eine andere Variable...

    Beispielsweise:

    Out: HalloWelt<322>dkd<rt>

    suche nach <322> und kopiere rest in string
    sodass ich einen neuen String mit <322>dkd<rt> hätte!

    Habe schon gegoogelt, leider nichts passendes gefunden!!!

    Bitte hilft der dame 🙂



  • Dann schauen wir doch einfach mal in die Dokumentation:
    http://www.cppreference.com/wiki/string/basic_string/start

    Dort finden wir zwei Methoden, find() und substr().


  • Mod

    Suchst du wirklich einen Algorithmus oder ein fertiges Programm? Fertiges Programm sollte ziemlich trivial durch Kombination von string::find und string::substr gehen. Wenn du den Algorithmus suchst, dann sieht dieser zwar zunächst harmlos aus:
    1. Suchwort finden
    2. Von Suchwort an bis Ende zeichenweise kopieren
    Aber hinter "Suchwort finden" tun sich natürlich Abgründe auf die ganze Generationen von Informatikstudenten in den Wahnsinn getrieben haben 😃 .



  • Also fertiges Programm sollte völlig ausreichen 🙂

    ... Wie würde das den in der Kombiantion aussehen ? Es würde mir auch reichen die letzten 10 Zeichen zu kopieren... Ich komme nicht weiter leider!



  • p.S.: Was ich halt nicht verstehe, bei der Find funktion würde ich doch nach einen gewissen Zeichen in dem String suchen und würde dort landen... Aber ich möchte ja dass es ab beginn des gefundenen Zeichens anfängt es zu kopieren! Das ist mir noch nicht so ganz einleuchtend...



  • SeppJ schrieb:

    Aber hinter "Suchwort finden" tun sich natürlich Abgründe auf die ganze Generationen von Informatikstudenten in den Wahnsinn getrieben haben 😃 .

    Kann ich nicht nachvollziehen. Einen idealen Algorithmus zu finden ist schwierig, aber nicht einen Algorithmus zu finden.
    Wenn es darum geht so etwas selber zu implementieren, dann würde ich mir zuerst eine Funktion schreiben, die Strings vergleichen kann. Dazu muss man nur wissen, dass ein String ein Array of Char ist und mit 0 terminiert wird. Mit dem gleichen Wissen kann ich danach den Text mit meiner Funktion absuchen, indem ich das Suchfenster immer um ein Zeichen verschiebe. Welche Annahmen kann ich den treffen, außer das man beim ersten unpassenden Zeichen aufhört zu vergleichen, um die Suche noch zu beschleunigen?



  • find() liefert dir die Anfangsposition oder std::string::npos für nicht gefunden. Wenn du die gefundene Position an substr() übergibst und das Ergebnis abspeicherst, solltest du dein Ziel erreicht haben.



  • Hallo Paul,

    kannst du das bitte in code ausdrücken. Ich kriege das nicht hin, leider...


  • Mod

    Paul Müller schrieb:

    SeppJ schrieb:

    Aber hinter "Suchwort finden" tun sich natürlich Abgründe auf die ganze Generationen von Informatikstudenten in den Wahnsinn getrieben haben 😃 .

    Kann ich nicht nachvollziehen. Einen idealen Algorithmus zu finden ist schwierig, aber nicht einen Algorithmus zu finden.

    Ich (und Informatikprofs) habe natürlich den Anspruch, auch einen guten Algorithmus zu benutzen.

    Nicole321 schrieb:

    kannst du das bitte in code ausdrücken. Ich kriege das nicht hin, leider...

    Zeig mal was du versucht hast. Etwas Eigeninitiative bei der Lösung sollte nämlich schon sein, insebesondere da dies ein Dreizeiler (find benutzen, auf npos prüfen, substr benutzen) sein sollte. Vielleicht hilft dir noch die Referenz:
    http://www.cplusplus.com/reference/string/string/find/
    http://www.cplusplus.com/reference/string/string/substr/

    Möglicherweise hat in diesem Thread auch schon jemand ein Beispiel verlinkt (*wink mit dem Zaunpfahl*).



  • #include <string>
    #include <iostream>
    
    int main()
    {
        std::string Out("HalloWelt<322>dkd<rt>");
    
    	std::string::size_type location = Out.find("<322>"); // position von '<'
    	if (location != std::string::npos)    // std::string::npos ist eine ungueltige Position
    	{
    		std::string neu(Out.substr(location));// Text von Position bis zum Ende in 'neu' kopieren
    		std::cout << neu << std::endl;
    	}
    	else
    	{
    		std::cout << "konnte nicht gefunden werden\n";
    	}
    
        return 0;
    }
    

Anmelden zum Antworten