strtok Hilfe

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • hi,
    Ich würde mich gern mit strtok beschäftigen, aber finde kein Tutorial.
    Deshalb wollte ich frag ob mir jemand einen Beispiel Befehl machen kann.


    /myhealth


    Man sollte nur nen Wert zwischen 0 und 100 nehmen können.
    Und falls man zb /myhealth blabla eingibt, soll kommen "Syntaxerror: /myhealth [0-100]."


    Kann das jemand für mich machen, damit ich daraus lernen kann?


    mfg Kaiza

  • was soll dann passieren? Soll man das Leben dann kriegen?


    if(!strcmp(strget(cmdtext,0),"/myhealth"))
    {
    if(IsPlayerConnected(playerid))
    {
    new leben = strval(strget(cmdtext,1));
    if(!strlen(strget(cmdtext,1)) { SendClientMessage(playerid,COLOR_RED,"Benutzung: /myhealth [leben]"); return 1; }
    if(leben > 150 || leben < 0) { SendClientMessage(playerid,COLOR_RED,"Health nicht über 100 oder unter 0!"); return 1; }
    SetPlayerHealth(playerid,leben);
    }


    return 1;
    }

    Zitat

    Nimm die Dinge wie sie sind: schlag, wenn du schlagen musst, tritt, wenn du Treten musst
    -Bruce Lee

  • Wenn ich richtig gelesen habe, wollte er es mit strtok:
    // OnPlayerCommandText
    new
    string[128],
    idx;
    string = strtok(cmdtext, idx); // den Text (cmdtext) bis zum ersten Leerzeichen auslesen und in string speichern
    if(strcmp(string, "/command", true) == 0) // den string und den "Befehl" vergleichen, falls die beiden strings gleich sind gibt strcmp 0 aus
    {
    // der Command soll später so heissen /command [Zahl] [Wort]
    new
    number;
    string = strtok(cmdtext, idx); // den Text ab dem ersten Leerzeichen (ab idx) und bis zum 2. Leerzeichen auslesen und in string speichern
    if(string[0] == 0) // prüfen ob der string leer ist (1. Buchstabe)
    {
    // Keine Eingabe hinter /myhealth
    return 1;
    }
    number = strval(string); // aus dem string einen integer machen und diesen in number speichern
    string = strtok(cmdtext, idx); // den Text ab dem zweitren Leerzeichen (ab idx) und bis zum 3. Leerzeichen auslesen und in string speichern
    if(string[0] == 0) // prüfen ob der string leer ist (1. Buchstabe)
    {
    // Keine Eingabe hinter /myhealth [Zahl]
    return 1;
    }
    format(string, sizeof(string), "Du hast '/command %d %s' eingeben", number, string);
    /*
    Das kannst du immer so weiter machen.
    strtok merkt sich, wo es zuletzt ein Leerzeichen gefunden hat und speichert diese stelle in idx. Wenn du idx innerhalb vom OnPlayerCommandText
    wieder auf 0 setzt. fängt strtok an wieder von Anfang an zu suchen...
    */
    }

  • Idx ist einfach eine Variable (integer), welche auch z. B. "test" heissen kann. Strtok arbeitet sich von Leerzeichen zu Leerzeichen und bleibt, wenn es auf ein Leerzeichen trifft, stehen und speichert diese Position in der Variable (in dem Fall idx). Wenn du nun erneut strtok anwendest, fängt strtok nicht wieder von vorne an zu suchen, sondern sucht ab dem letzen gefundenen Leerzeichen (ab idx) wieder bis zum nächsten Leerzeichen.


    EDIT: Beispieleingabe:

    Zitat

    /command 1 Doktor


    Der "/" hat die Position 0 (string[0]), das "c" die 1 usw. Wenn du nun strtok auf diese Eingabe loslässt (fängt er bei idx an zu suchen, da idx = 0 ist am Anfang fängt er vn vorne an), dann speichert er im string "/command" und in idx "8" (da bei der 8 das Leerzeichen ist). Wenn du nun erneut strtok auf die Eingabe loslässt (fängt er ab dem ersten Leerzeichen (idx = 8) an) dann speichert er in string "1" und in idx "10" (da dort wieder das Leerzeichen ist). Diese "1" musst du nun noch von einem string in einen Wert umwandeln mit strval(string). Wenn du strtok zum 3. Mal auf die Eingabe anwendest (fängt er ab dem 2. Leerzeichen (idx = 10) an zu suchen), dann speichert er in string "Doktor" und in idx "17"...


    _______


    Strval macht aus einem string eine Zahl und speuchert diese in einer Variable variable = strval(string);...