Wort in String speichern



  • Hallo nochmal...

    ich hab die forensuche schon genutzt und leider nur einen ahnlichen artikel gefunden.
    https://www.c-plusplus.net/forum/257994-full

    Mein Problem ist aber, dass er eher das komplette wort speichern soll statt nur die stelle wor es steht.

    In meinem String steht folgendes drin:
    [{"success":{"username":"babohue"}}]

    suchen tu ich wie folgt:

    size_t found = user.find("username");

    if(found != string::npos){
    cout<<found<<end;
    }

    und leider gibt er mir nur die Stelle an, andem das Username anfangt. Ich wollte aber das "babohue" in die variable found gespeichert wird. Hat da jemand vllt einen tip oder eine idee, wie ich das am besten machen kann??

    MFG
    silver


  • Mod

    Wir können nicht in deinen Kopf gucken. Wie kennen deinen Code nicht. Deine Problembeschreibung ist für Außenstehende absolut unverständlich.
    Du brauchst Hilfe?
    Wie man Probleme nachstellbar und nachvollziehbar macht
    Wie man seinen Beitrag lesbar formatiert
    Wie man Fragen richtig stellt

    (Wow, das ist glaube ich das erste Mal, dass ich alle 4 davon für nötig halte 😮 )

    Falls es übrigens um das Durchsuchen einer Webseite gehen sollte: Das "Parsen" von HTML mittels einer Volltextsuche klingt nicht nach etwas, das zuverlässig funktionieren wird.



  • Das sieht nach JSON aus, also brauchst du einen JSON-Parser.



  • found ist vom Typ size_t und der kann keinen String aufnehmen.

    Aber möglicherweise kommst du ja mit der Position von "username", der Länge von user bzw. "username" und etwas Rechnerei soweit, dass du weißt wo babohue anfängt und aufhört.
    Dann kannst du substr nehmen.

    Oder du nimmst gleich regex


  • Mod

    Nach 5x Lesen habe ich glaube ich so langsam eine Ahnung, was du wissen möchtest:

    Wie du festgestellt hast (und wie du leicht in jeder Referenz hättest lesen können), gibt dir find die Stelle an, an der ein Suchstring steht. Was auch sonst? Der Text hinter dem Suchstring steht dann logischerweise an der Position des Suchstrings plus der Länge des Suchstrings.



  • Hey,

    vielen Dank fuer den Tip,
    das mit dem substr hat super funktioniert... jedoch war das nur ein beispiel mit dem babohue.

    der username wird automatisch generiert... dieser besteht dann zwischen 28-32 zeichen.

    z.B.
    [{"success":{"username":"aahdkwnshd21245214hahshdlanwidnakshdiansu"}}]

    wenn ich jetzt dem substr angebe der soll 32 zeichen speichern, kann es sein, dass die sonderzeichen "}}] auch mit in dem substr. gespeichert werden.

    ich hab es schon mit:

    size_t found = user.find("username");
    
    if(found != string::npos){
    string find = found.substr(25,350;
    find.replace("}", "");
    
    cout<<find<<end;
    }
    

    haette jemand eine idee, wie ich am besten die Sonderzeichen rausfiltern koennte??

    MFG



  • Das entscheidende Kriterium scheinen ja wohl die Anführungsstriche zu sein, also suche nach diesen (wie das geht solltest du ja wissen ;-).

    Vllt. solltest du einfach einen JSON-Parser aus dem Netz suchen, z.B. RapidJSON



  • Das Ende vom Usernamen ist 4 Zeichen vom Strinende (von user) weg.
    Oder such nach "}}] , dann hast du auch das Ende.

    Etwas Rechnerei eben.

    Wie flexibel willst du das haben?



  • DirkB schrieb:

    Oder du nimmst gleich regex

    Th69 schrieb:

    Das entscheidende Kriterium scheinen ja wohl die Anführungsstriche zu sein, also suche nach diesen (wie das geht solltest du ja wissen ;-).

    DirkB schrieb:

    Das Ende vom Usernamen ist 4 Zeichen vom Strinende (von user) weg.
    Oder such nach "}}] , dann hast du auch das Ende.

    JSON ist aber keine reguläre Sprache.

    Th69 schrieb:

    Vllt. solltest du einfach einen JSON-Parser aus dem Netz suchen, z.B. RapidJSON

    Das ist hier die Lösung und nichts anderes.



  • Hey leute vielen Dank nochmal fuer eure ganzen tips..

    hab es hinbekommen 🙂

    size_t found = user.find("username");
    
    if(found != string::npos){
    
    size_t end = user.find_last_of('\"');
     string userid = user. substring(25, end-25);
    cout<<userid<<end;
    }
    

    das klappt so ganz super und genau so, wie ich mir das vorgestellt habe...

    vielen Dank nochmal 🙂

    Gruss



  • Was soll denn bitte der feste Wert 25 da im Code???
    Du suchst nach dem Zeichen und verwirfst dann das Ergebnis...



  • Ach naja,

    zweimal find zu definieren und nicht zu nutzen sowie '\:' sind auch nicht gerade sehr .....
    ... erfolgreich.


Anmelden zum Antworten