string , suchen , ausschneiden , abscheiden



  • Hallo , ich habe einen string aus dem ich bestimmt kleine strings rausschneiden will. Habe jetzt schon mit ein paar string funktionen rumprobiert, bin aber noch zu keinem guten ergebnis gekommen. Was ganz gut ging war strstr damit konnte ich in meinem string nach einem zweiten suchen und alles davor abschneiden. Geht das auch von hinten ? ALso durchsuchen und alles was danach kommt abschneiden ?
    Oder andere möglichkeiten ?

    So schaut mein string aus:

    Access-Control-Allow-Origin: *

    37
    Country: GERMANY (DE)
    City: AnyCity
    IP: 11.11.11.11

    0

    Ich will nun country und city extra haben um diese weiter zu verarbeiten.
    Danke schonmal für alle Tipps



  • so hab nun wa sgefunden mit strto() 🙂

    aber wie kann man denn vom anfang zb 5 zeichen wegbekommen ?



  • einfach nochmal strstr , dann wird abgeschnitten , sry für unnötigen post. bitte löschen



  • Hallo,
    das hier ist jetzt ungefähr mein Ansatz gewesen, als ich HTTP Header aufgedrößelt habe:

    1. Suche in ZeigerString Ende der Zeile indem '\n' auf '\0' setzen und merke in ZeigerZeilenumbruch
    2. Suche in ZeigerString ':' , merke in ZeigerDoppelpunkt und setze auf '\0'
    3. Vergleiche mit strcmp() von Anfang der Zeile an auf Parameter("Country", "City")
    3a. Wenn gewünschter Parameter, dann ZeigerWert=ZeigerDoppelpunkt+1
    3b. Wenn ungewünschter Parameter, dann ZeigerString=ZeigerZeilenumbruch+1 und weiter bei 1.

    ZeigerWert sollte nun auf den entsprechenden Wert zeigen.

    Wenn der String nicht verändert werden darf, dann musst du die Änderungen vermerken und wieder "zurückändern" oder mit einer Kopie arbeiten.

    Wenn du unter einem System arbeitest, das seine Zeilenumbrüche nicht mit u.a. '\n' kennzeichnet, musst du das anpassen.

    Hoffe das würde ungefähr auf das Ergebnis kommen, das du brauchst.

    Edit:
    Um vom Anfang Zeichen wegzubekommen kannst du eigentlich den Zeiger um die entsprechende Anzahl verschieben:
    PointerAnfang=PointerAnfang+n



  • Zeigerarithmetik.
    Du kannst den Offset zu dem Zeiger addieren.

    Schau mal hier: http://www.cplusplus.com/reference/clibrary/cstring/
    Da ist alles dabei was du brauchst.

    Die meisten String(such)funktionen geben den Zeiger auf die gefundene/bearbeitete Stelle zurück. Damit kannst du weiterarbeiten.

    strstr() findet einen String.
    strchr() findet ein Zeichen.

    Ein String ist bei dem Zeichen '\0' zu Ende.

    Ist dein Text ein String der '\n' enthält oder sind das mehrere?

    strto() ist kein Standard.



  • c starter schrieb:

    aber wie kann man denn vom anfang zb 5 zeichen wegbekommen ?

    Umkopieren:
    char alterString[] = "city:Entenhausen";
    char neuerString[100]; //Es muss sichergestellt sein, dass das groß genug ist!

    strcpy(neuerString, &alterString[5]);



  • Belli schrieb:

    Umkopieren [...]

    alterString + 5 !?



  • Jo jo,

    für einen Anfänger finde ich es übersichtlicher, einen neuen Speicherbereich zu nehmen, als mit Offsets oder Zeigern in ein Array zu hantieren.

    Aber sicher geht das auch so mit dem Vorteil, dass nicht zu wenig Speicher reserviert werden kann.



  • c starter schrieb:

    so hab nun wa sgefunden mit strto() 🙂

    aber wie kann man denn vom anfang zb 5 zeichen wegbekommen ?

    Wenn du strtok gemeint hast, würdest du von "GERMANY (DE)" zunächst einmal nur "GERMANY" zurückerhalten, was wohl kaum ausreichend sein dürfte.


Anmelden zum Antworten