strtok



  • Bengo schrieb:

    Ich meinte die while Schleife von Wutz

    Und ich bezog mich auf dein Post von 19:33:25 22.10.2011. Denn in 11 Sekunden bekomme ich so eine Antwort auch nicht hin 😃

    Hast du copy & paste gemacht oder abgeschrieben?



  • Hmm, das mit dem ',' in der while ist generell gültig? Hatte ich nur noch nie gesehen.

    Achja, wenn der String nicht "zerstört" werden darf, dann solltest du Wutzs Beispiel auch noch so anpassen, dass dein String nicht verloren geht 😉



  • Der String kann verloren gehen, die einzelnen Zahlen sollten dann ihre eigenen Variablen bekommen.



  • DaRe schrieb:

    Hmm, das mit dem ',' in der while ist generell gültig? Hatte ich nur noch nie gesehen.

    Das ist der Kommaoperator.
    Kommt meist bei for-Schleifen vor, wenn man mit zwei Variablen arbeitet.



  • Apropos for-Schleifen: Diese while-Schleife ließe sich eleganter als for-Schleife schreiben:

    for(s = data; 1 == sscanf(s, "%d%n", &x, &n); s += n) {
      printf("%d\n", x);
    }
    

    Wobei ich mir überlegen würde, den sscanf-Overhead einzusparen und gleich auf strtol aufzusetzen:

    char const *current;
      char *next; /* Nicht, dass da nachher jemand reinschreibt; das ist nur wegen strtols Signatur nicht const */
      long x;
    
      for(current = data;
          x = strtol(current, &next, 10), current != next;
          current = next) {
        printf("%ld\n", x);
      }
    

    Da wär dann auch der Komma-Operator wieder dabei.



  • Gibt es denn nicht eine einfache variante?



  • Was ist denn einfacher für dich?
    - Was du verstehst?
    - Wenig Befehle?

    Wenn das immer die gleich Anzahl Zahlen ist:

    char *s="\t1\t22\t333\t4444\t5555\t"; 
    int zahl1, zahl2, zahl3, zahl4, zahl5;
    
    sscanf(s," %d %d %d %d %d", &zahl1, &zahl2, &zahl3, &zahl4, &zahl5);
    


  • Danke hat mir sehr geholfen.


Anmelden zum Antworten