String auslesen und löschen



  • Hallo,
    schau dir mal folgende Methoden an:

    insert(), erase(), find(),replace()...

    Alle haben sehr einfache Syntax und somit leicht zu erlernen. Dann ist dein Problem ein Kinderspiel!

    lg, freakC++



  • Dobyasd schrieb:

    Ich hab einen String
    Ich suche ein bestimmtes Zeichen "§"

    Beispiel String:

    abcdefg§hijklmnop

    Nun soll er alles was sich rechts vom § rechts befindet, löschen!
    Also es soll dann

    abcdefg§

    stehen

    http://www.cplusplus.com/reference/string/string/

    Ein wahres Hexenwerk diese Referenz, man sollte einen Exorzist rufen !



  • Einfach ne Forschleife Hochzählen bis zum Auftreffen deines Zeichens
    Falls gefunden Zählerschleife+1, ein \0 einfügen fertig. Löscht zwar dein Klammote nicht wirklich. Nur bei der Ausgabe wird es dich nicht mehr stören.

    Oder Forschleife
    kopiere jedes Element einschliesslich dein § in ein array, fertig.



  • Cefour schrieb:

    Einfach ne Forschleife Hochzählen bis zum Auftreffen deines Zeichens
    Falls gefunden Zählerschleife+1, ein \0 einfügen fertig. Löscht zwar dein Klammote nicht wirklich. Nur bei der Ausgabe wird es dich nicht mehr stören.

    Glaubst du wirklich, das funktioniert?

    std::string s = "abcdefg$hijklmnop";
    for(int i = 0; i < s.size(); ++i)
    {
        if(s[i] == '$')
        {
            if(i + 1 < s.size())
            {
                s[i + 1] = '\0';
            }
            break;
        }
    }
    std::cout << s << std::endl;
    

    Ausgabe: abcdefg$ijklmnop



  • std::string s("asdfgh$asdfghklj");
    s.erase(++ std::find(s.begin(), s.end(), '$'), s.end());

    bb

    PS:

    Ausgabe: abcdefg$ijklmnop

    bestimmt mit gcc^^
    msvc gibt mir das hier aus:
    abcdefg$ ijklmnop

    weiß aber nicht, ob der standard was darüber schreibt, wie '\0' darzustellen ist 😉 iwie ist ja beides logisch^^



  • @unskilled: Ich würde sicherheitshalber aber noch ein "if" dazwischenschieben, falls der String wider allen Erwartens doch kein '$' enthält. Sonst wird ja einfach alles gelöscht (bei npos==-1). Und ich bin mir auch nicht sicher, ob "++" hier funktioniert, müssten der Rückgabewert von "find" nicht ein R-Value sein?



  • Hey leute,
    das mit der for-Schleife sehe ich als Schwachsinn hier an, denn man kann es sich mit den ganz normale Stringmethoden total einfach machen. So wie es unskilled gemacht hat!!

    lg, freakC++



  • Wobei das durch die string-Routinen intern sicher auch nicht viel anders als über eine Schleife funktioniert.
    Der Code von Unskilled sieht natürlich einfach geiler aus 😃



  • Badestrand schrieb:

    @unskilled: Ich würde sicherheitshalber aber noch ein "if" dazwischenschieben, falls der String wider allen Erwartens doch kein '$' enthält. Sonst wird ja einfach alles gelöscht (bei npos==-1). Und ich bin mir auch nicht sicher, ob "++" hier funktioniert, müssten der Rückgabewert von "find" nicht ein R-Value sein?

    Japp, das if würd ich eigtl auch reinmachen ^^
    Dachte ich eigtl auch (R-Value) aber es geht - zumindest im MSVC ^^

    bb



  • unskilled schrieb:

    Dachte ich eigtl auch (R-Value) aber es geht - zumindest im MSVC ^^

    Heißt ja nicht unbedingt dass es auch immer gehen darf/sollte/muss 😉


Anmelden zum Antworten