Frage zu STRTOK bzw. die Umwandlung in einzel Strings


  • Mod

    Jackson0 schrieb:

    Ich habe hier

    http://www.proggen.org/doku.php?id=c:lib:stdio:formatstring

    zwar was gefunden aber werde für mein Problem auch nicht schlau draus.

    Die Liste auf der Seite ist unvollständig. Sei dir sicher, dass du gute Quellen benutzt. Vielleicht helfen dir die als wichtig markierten Threads hier im Forum, um gute Referenzen zu finden.

    P.S.: Meine Güte ist die von dir verlinkte Referenz schlecht 👎 . Ist der Autor Xin dort der Xin hier aus dem Forum? Der hat ja die Formatstrings von printf und scanf zu einem zusammen geworfen und tut so, als wären sie gleich 😮 . Das ist ja schon kriminelle Verblödung des Lesers.
    P.P.S.: Ja, er ist es.



  • Ich Google mir schon die Finger wund, wo finde ich den eine Gute Referenz???


  • Mod

    Jackson0 schrieb:

    Ich Google mir schon die Finger wund, wo finde ich den eine Gute Referenz???

    Ich habe dich erstens auf diesen Thread verwiesen, wo direkt eine verlinkt ist:
    http://www.c-plusplus.net/forum/300567
    Zweitens:
    Ist das wirklich so schwer?



  • SeppJ schrieb:

    Ich habe dich erstens auf diesen Thread verwiesen, wo direkt eine verlinkt ist:
    http://www.c-plusplus.net/forum/300567

    Jetzt verstehe ich gar nix mehr, wann hast du mich darauf hingewiesen und unter dem link finde ich nichts was mir bei meinem Problem weiterhilft...


  • Mod

    Jackson0 schrieb:

    Jetzt verstehe ich gar nix mehr, wann hast du mich darauf hingewiesen

    SeppJ schrieb:

    Vielleicht helfen dir die als wichtig markierten Threads hier im Forum, um gute Referenzen zu finden.

    Hast du offensichtlich nicht gemacht, denn der verlinkte Thread ist einer der als wichtig markierten.

    und unter dem link finde ich nichts was mir bei meinem Problem weiterhilft...

    Dann kann ich dir auch nicht weiter helfen. Wenigstens ein bisschen Eigeninitiative muss schon sein. Wenn du nicht einmal kurze Texte lesen und verstehen möchtest, ist Programmieren vielleicht nichts für dich.



  • Offensichtlich ist das Klicken auf einen Link, der nicht sofort zur Problemlösung führt, sondern einen weiteren Klick und Suchen in einer PDF-Datei erfordert schon zuviel für einige Leute.

    Und hier nochmal die Passage für dich: (auf dem Kapitel zu fscanf)
    `s

    Matches a sequence of non-white-space characters.`
    Jetzt muss man nur noch wissen, was non-white-space bzw. white-space bedeutet (steht auch in der PDF), und schon kann man schlussfolgern, dass das %s beim 1. Auftreten eines white-space aufhört mit der Interpretation. Und da ',' eben kein white-space ist, könnte man auf den Gedanken kommen, dass *scanf NICHT beim Zeichen ',' aufhört, sondern nur aufhört, weil die andere Bedingung (max. 32 Zeichen) erfüllt ist.
    Weiterhin könnte man auf den Gedanken kommen, dass somit %s für deine Aufgabenstellung nicht zur Lösung führt.
    Weiterhin könnte man auf den Gedanken kommen, einfach mal den Rest der Spezifikation zu *scanf zu lesen, und siehe da, direkt nach %s steht dort irgendwas von scanset und %[].



  • Wenn man noch C-Anfänger ist und nicht so gut Englisch kann und eine komplette C-Ref. in Englisch bekommt ist das nicht so einfach!

    Aber ich habe mich da jetzt durchgewuselt und die Lösung gefunden.

    %32[^,]

    Letzte Frage: Wenn in

    char string[] = "8,StringMitVarLaengeMax32,7,4Zeichen";
    

    anstelle von "4Zeichen" auch "Groß- und Kleinschrift + Zahlen und Sonderzeichen!" enthalten sind was mache ich dann?

    %128s dann hört (logischer Weise wegen SPACE) nach "Groß-" auf.
    %128c wäre die logische Lösung aber wenn Datenlänge <128 wird nix übergeben
    %128[...] würde gehen aber dann müssten alle Zeichen in die Klammer was sehr umständlich wäre

    Hat sich schon erledigt:
    %128[^/0] geht

    Danke an alle die Mitgeholfen haben!



  • Jackson0 schrieb:

    %128c wäre die logische Lösung aber wenn Datenlänge <128 wird nix übergeben

    Da es der letzte Eintrag ist, hört sscanf selbvstverständlich am Ende vom String auf.
    Das Problem an %128c ist, dass der Stringterminator nicht angehängt wird.
    Du bekommst also keinen gültigen C-String.

    Jackson0 schrieb:

    %128[...] würde gehen aber dann müssten alle Zeichen in die Klammer was sehr umständlich wäre

    Wie du selber an deiner Lösung siehst, kannst du auch eine negative Scanlist erstellen. Und es gilt auch hier: am Ende vom String hört sscanf auf.
    %128[^,] oder wenn komma erlaubt ist, dann nimm Newline %128[^\n] oder



  • Jackson0 schrieb:

    Hat sich schon erledigt:
    %128[^/0]

    Das sind aber zwei Zeichen: Null und der normale Schrägstrich.

    ^Wohl nur ein Schreibfehler, aber ich weiß nicht ob nur hier oder auch bei dir im Programm^



  • Danke für den Hinweis ich meinte \0 aber \n ist richtig.


Anmelden zum Antworten