einfache Funktion um String zu teilen



  • Hallo Leute,

    ich bin neu hier im Forum und beise mir schon seit Tagen die Zähne an einer einfachen Aufgabe aus.

    Ich will einen eine IP-Adresse in Form eines Strings z.B.

    192.168.0.9
    

    in vier integer Zahlen aufteilen.

    Kann mir hierbei jemand behilflich sein?
    Oder hat das sogar schon jemand gemacht?

    Grüße Sebastian



  • Gibt bestimmt schon fertige Funktionen in Libraries. Wenn deine Anwendung ANSI-C-konform sein soll, kannst du dir bspw. die Funktion strtok() ansehen.

    Wie man dann einen Teilstring (bspw. "192") in einen Integer umwandelt findest du in der FAQ zur Genüge beschrieben 🙂

    MfG SideWinder



  • Oder benutz einfach sscanf



  • ich kann mir gerade überhaupt nicht vorstellen wie das Konstrukt dann aussehne müsste, kann mir da jemand ein Beispiel posten?



  • int numbers[4];
    sscanf("127.0.0.1", "%d.%d.%d.%d", &numbers[0], &numbers[1], &numbers[2], &numbers[3]);
    


  • Hey sebi87.

    Du kannst es auch mit strtok() machen.

    strtok("127.0.0.1", "."); // gibt "127"
    strtok(NULL, "."); // gibt "0"
    strtok(NULL, "."); // gibt "0"
    strtok(NULL, "."); // gibt "1"
    

    Ist aber umständlicher.

    Kleine Erklärung:
    Wird im ersten Parameter ein String angegeben, dann gibt der Befehl das erste Token zurück. Mit jedem weiteren Aufruf, bei dem beim ersten Parameter NULL übergeben wird, wird das nächste Token zurückgegeben.

    ^Bitte steinigt mich nicht, wenn das nicht 100%ig stimmt. ^^^



  • @ haiyyu
    Dein Beispiel ist aber falsch. Der erste Funktionsaufruf gibt nicht 127 zurück, sondern "127". Das die restlichen 3 daher auch falsch sind, kannst du dir ja denken. Und wie der sebi87 erwähnte, so möchte er Integer zahlen haben. Also müsste er bei deiner Funktion die zurückgegebenen Zeichenketten noch umwandeln. Da ist sscanf doch die deutlich sinnvollere Lösung. 🙂



  • Hey Janjan.

    Oh natürlich, I failed.
    sebi87, nimm lieber das Beispiel von Janjan.



  • Hallo Leute,

    danke für die Hilfe. Manchmal sieht man den Wald vor lauter Bäumen nicht.

    Grüße Sebastian


Anmelden zum Antworten