Char* nach Wort suchen und Extrahieren!?



  • Hallo Leute,

    Bin bischen Neuling in der ganze Linux Programmierung.
    Daher meine Frage...

    Ich hab ein Char in dem steht z.B. "a:3:123|b:4:1234"

    Ich möchte nun z.B. eine funktion das wenn ich b:4: übergebe mir alles nach dem Parameter also (1234) zurück gibt mehr ned auch wenn was da hinter kommt die 4 nach dem B gibt an wie lang der String ist..

    Bitte hilfeeee 😢

    Danke



  • Banshee schrieb:

    Ich möchte nun z.B. eine funktion das wenn ich b:4: übergebe mir alles nach dem Parameter also (1234) zurück gibt mehr ned auch wenn was da hinter kommt die 4 nach dem B gibt an wie lang der String ist..

    Satzzeichen bitte!!!!!111

    Habs drei mal gelesen und immer noch nicht richtig verstanden...

    Aber egal, zumindest dem ersten Teil des Satzes nach, kann ich dir sagen dass es so eine Funktion nicht fertig gibt.

    Mit strncmp() und einer for-Schleife kann man das machen.



  • Hallo,

    Also nochmal das ganze geordnet..

    Ich hab einen String mit "a:4:1234;a:5:12345"
    Okay, a:X: sagt mir wie lang die Zeichenfolge nach a:X: ist, ich brauch nun ne funktion die mir genau das zurück gibt was hinter a:X: steht 🙂



  • Hallo,

    Ich schätze er braucht fast eine gleiche Funktion wo ich, wo Ich aktuell gerade auch keine Ahnung hab wie anfangen.

    Ich hab das nun so verstanden das a:X: ein anfang von einem Wert ist, das X angibt wie lang das Zeugs nach dem a:X: ist und das möchte er wohl von der funktion zurück bekommen...

    Währe nett wenn jemand mal nen Beispiel machen könnte, bräuchte so was ähnliches leider auch 😢

    Danke euch!



  • Vielleicht täusche ich mich, aber wäre so eine Funktion nicht absolut sinnlos?
    Du kannst doch sofort anhand des X erkennen, welcher Wert rauskommen wird.

    Wenn z.B. in "a:X:" X = 3 ist, dann wird "123" zurückgegeben. Bei X = 5 "12345". Falls dem so ist, brauchst du erst garnicht groß den langen String durchsuchen sondern bloß anhand des X die "Zahlenreihe" erzeugen.



  • Ja Richtig, aber es soll ja keine Zahlenreihe Kreiert werden, da 1234 glaub ich nur ein Beispiel ist..

    Nehmen wir anstatt 123 mal ein wort oder sowas...



  • Also, eine fertige Funktion gibts zu diesem Problem natürlich nicht, d. h. selber basteln.

    Wie das geht, kann ich gerne erklären. Ne Komplettlösung gibts vorerst auf jeden Fall noch nicht. Man soll ja auch was lernen ;).

    Im Endeffekt ist eh nicht viel dran. Man braucht nur die Zahl in a:X: (X = die Zahl) auslesen, diesen String im Gesamtstring suchen und den String danach mit der vorher ermittelten Anzahl auslesen.

    Als erstes sollte man mal festlegen wieviele Parameter unsere Funktion braucht. Das wären meiner Meinung nach 3. Einmal der Gesamtstring, dann der Suchstring (a:X:) und dann noch ein Parameter mit dem man den gefundenen String zurückgeben kann:

    char * holString(char * alles, char * suche, char * ergebnis);
    

    Nun muss man erstmal die Anzahl ermitteln aus dem suche String. Am einfachsten wäre es einfach die dritte Position zu lesen, aber wir wollen lieber auf nummer sicher gehen. Also ermitteln wir erstmal den ersten Doppelpunkt mit strchr() und lesen die Zahl danach aus, d. h. wir wandeln den String in eine Ganzzahl um mit atoi().

    So nun haben wir die Anzahl der Zeichen. Jetzt wollen wir wissen, wo wir das jetzt im Gesamtstring alles auslessen wollen. Das macht man mit strstr(). Nun wissen wir wo der suche String in alles ist und schon können wir einfach mit strncpy() den String danach auslesen und in ergebnis kopieren.

    Am Schluss übergeben wir noch ergebnis als Rückgabewert bzw. können wir sogar gleich den Rückgabewert von strncpy() zurückgeben (ist nämlich der selbe ;)).

    So jetzt versucht euch mal dran @Banshee und @Sany.

    PS: Hier http://www.cplusplus.com/ref/indexr.html findet ihr die genannten Funktionen dokumentiert.



  • Hey AJ,

    So eine ähnliche Funktion hab ich schon programmiert siehe meinen Beitrag http://www.c-plusplus.net/forum/viewtopic.php?t=91481&start=0&postdays=0&postorder=asc&highlight=

    Nur hab ich das Problem das wenn eine Zahl in einem String vorkommt, das strstr mir ein segfault liefert!


Anmelden zum Antworten