[C++] Teilstring nach ntem Zeichen auslesen?



  • Hallo liebe Gemeinde,

    ich habe mal wieder ein Problem. Ich möchte aus einem String der z.B. so aussieht:

    Wort1 Wort2 XFTP_NU_CP ABCD EFGH IJKL Wort3 Wort4 Wort5

    Lediglich die drei Worte ABCD, EFGH und IJKL in einen Substrin lesen. Nur ist mir die Länge der einzelnen Wörter nicht bekannt. Das einzige was ich weiß ist, der Substring beginnt ab dem "XFTP_NU_CP" und geht von da aus gezählt bis zum 4ten Leerzeichen. Alles andere ist komplett variabel.

    Meine Lösungsansätze sind alle schrott, ich habe sie auch wieder verworfen, nur etwas was mich wirklich weiterbringt finde ich nicht. Gibt es die Möglichkeit in C++ in einem String nach dem 4ten Zeichen ab Position N zu suchen????

    Ich bin mit meinem Latein am Ende. Wäre super wenn ihr mir helfen könntet.

    Liebe Grüße,

    Julian 😞

    _____________
    Edit:

    Wie ich gerade bemerkt habe hab ich ins falsche Forum gepostet. Bitte verschiebt mich. Ich war zu vorschnell. Tschuldigung



  • Du musst doch nur das erste Leerzeichen nach dem Teilstring, und danach dreimal das erste Leerzeichen nach dem letzten Fundort finden. Der Funktion String::IndexOf(String, int) kannst Du den Beginn der Suche als zweiten Parameter mitgeben.

    Z.B.
    1. Suche "XFTP_NU_CP "
    2. Merke (Fundort+11)
    3. Suche " " ab (2.)
    4. Merke (Fundort+1)
    5. Suche " " ab (4.)
    6. usw.

    Auch EDIT:
    Ok, in C++ heisst die Funktion string::find, funktioniert aber genauso.



  • Ja sowas in etwa hatte ich schon, ich dachte nur es geht evtl. ein wenig eleganter als eben:

    searchparam = Searchfor[i];
    splength = searchparam.length();
    beginpos = buffer.find(searchparam, 0);
    if(beginpos != -1)
    {
    beginpos2=beginpos+splength;
    endpos = buffer.find(blank, beginpos2);
    endpos2 = buffer.find(blank, endpos);
    endpos3 = buffer.find(blank, endpos2);
    }
    

    Mir schwebte etwas vor wie Substr(von beginpos bis zum 4ten leerzeichen ab beginpos) nur bin ich leider noch nicht sehr weit in C++ was es mir gerade nicht umbedingt einfach macht ^^.

    Aber vielen Dank schonmal ich werde es jetzt erstmal so machen. Aber vll kennt ja jemand noch eine kürzere, elegantere lösung???

    LG Julian


Anmelden zum Antworten