Ayuda Porfavor strtok y strcmp?
#1

Hola a todos espero que esten bien y q me puedad ayudar con mis dudas XD
necesito saber como funciona el strtok y el strcmp, ya busque en wiki del samp y como ta en ingles nu se entiende muy bienXD espero que me puedan ayudar.....
El siguiente codigo lo saque de wiki en ayuda del strtok
----------------------------------------------------------------
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
//Aver playerid supongo que obtiene el id del jugador q ejecuta el comando
//cmdtext[] supongo que es una matriz de los comandos....
{
    new cmd[128], idx;//se crea un array їtipo cmd? con longitud 128 y un idx їpara q sirve idx que valor toma?
    cmd = strtok(cmdtext, idx);
        //sacando del wiki y usandon el traductor ****** jejeje y arreglando un poco el strtok sirve para:
        //(strtok) se utiliza para buscar una cadena y encontrar una variable despuйs de un " " (espacio), luego
        //devolverlo como una cadena.
        //osea si se tipeara "/kick 2" el strok seria 2 de tipo string por que esta despues de un espacio???
        //que hace ahi el idx??
    if(strcmp(cmd, "/kick", true) == 0)
        //bueno si lo q pienso esta bien entoncs cmd = 2, tambien en wiki dice q strcmp sirve para comprara strings
        //pero ahi algo q no entiendo, traduciendolo con traduc. ****** lo que devuelve la funcion:
        //-1 si cadena1 viene antes de cadena2
        //1 si cadena1 viene despues de cadena2
        // cadena 1 їANTES o DESPUES? de cadena 2? no deberia devolver solo si son iguales o no las cadenas??
        //pero bueno dejando eso de un lado esa linea: "if(strcmp(cmd, "/kick", true) == 0)" no estaria mal?
        //si no toy mal compara "cmd" con "/kick" pero cmd valdria 2 no?? entoncs "2" no es = a "/kick", ayudaЎ
    {
        new tmp[128];
        tmp = strtok(cmdtext, idx);
        if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /kick [playerid]");
        Kick(strval(tmp));
        return 1;
    }
    return 0;
        //que significa return 0 y return 1?
}
------------------------------------------------------------------
AQUI EL codigo de arriba sin nada de mis comentarios:
************************************************** ****
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp(cmdtext, "/me", true, 3)) // 3 is the length of /me
    {
        if(!cmdtext[3])return SendClientMessage(playerid, 0xFF0000FF, "USAGE: /me [action]");
        new str[128];
        GetPlayerName(playerid, str, sizeof(str));
        format(str, sizeof(str), "* %s %s", str, cmdtext[4]);
        SendClientMessageToAll(0xFFFF00AA, str);
        return 1;
    }
    return 0;
}
************************************************** ****
links de donde saque info:
el link de wiki sobre Strtok https://sampwiki.blast.hk/wiki/Strtok
el link de wiki sobre Strcrmp https://sampwiki.blast.hk/wiki/Strcmp
Bueno espero que puedan contestar todas mis dudas si no es molestia
Mas bien Disulpenme molestarlos, toy estudiando Programacion en vb.net asi q mas o menos le agarro,
pero no entiendo bien jejeje
Gracias a todos y buen fin de Semana
Reply
#2

Pon todo entre [*pawn*] [*/pawn*] Sin los asteriscos claro, que se es complicado leer un script asн.

Y bien hecho en buscar info de strtok y strcmp, xd has lo que te dije (Edita el post) y te ayudo (:

NOTA: Sуlo los scripts

EDIT: Strcmp Es el proceso de comandos, puedes utilizar dcmd, ZCMD, Etc.

Strtok, te lo dice en un sуlo renglon.

Quote:

This (strtok) is used to search a string and find a variable typed after a " " (space), then return it as a string.

Traducido ¬¬': Este script (Strtok) Es usado para buscar un string (Letra, consultalo) y una variable escrita despues de " ", y despuйs devolverlo (return) como un string.

En el idioma ingles string es definido como: "Cadena" Pero en programaciуn y para mi sуlo es string, y lo tomo en casos como "letras" etc.

Suerte!
Reply
#3

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
//Playerid: ID del jugador que escribiу el comando
//cmdtext[]: el comando escrito (guardado en un string)
{
new cmd[128], idx;//Se crea un array de nombre cmd con longitud 128 y una variable idx (sin valor actualmente)
cmd = strtok(cmdtext, idx); //Guarda en la cadena cmd la variable que encuentre la funciуn tras el espacio encontrado en cmdtext
//idx sirve para saber la posiciуn de la cadena en la que se encuentra el espacio, no debe importarte
if(strcmp(cmd, "/kick", true) == 0)
//strcmp: si devuelve 1, la cadena 1 es mayor que la 2.  Si devuelve 0 son iguales (como en este caso). SI devuelve -1 la cadena 1 es menor a la 2
{
new tmp[128];//Nueva cadena
tmp = strtok(cmdtext, idx);//Repetimos el proceso como al principio
if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /kick [playerid]");//Si la longitud de tmp es 0 (significa que no se ha encontrado nada despuйs del espacio) muestra el mensaje
Kick(strval(tmp));//Kickea al jugador deseado (strval convierte una cadena en un entero)
return 1;//El return
}
return 0;
//Return 0 significa que el cуdigo se ha ejecutado sin problemas, return 1 indica que se ha encontrado un problema
//Esto es literalmente, el uso que tiene es el siguiente: el primer return, (return 1) es para que el servidor no continue ejecutando el callback "OnPlayerCommandText", ya que este ha realizado lo que querнamos
//El return 0 "cierra" el callback y le dice al programa que continue leyendo el script
}
No todo serб correcto, pero si te puede guiar bastante.
Reply
#4

Bueno por los comentarios que realizaste, creo que no tenes muchos conocimientos sobre pawn. te recomiendo leer tutoriales para por lo menos entender mejor la declaracion de variables y arrays. hace un par de dias postie uno sobre todo pawn, te sugiero leerlo.

Ahora bien resumiendote:
·strtok: Es una funcion que retorna el string contenido entre 2 index, uno indicado, y el otro se identifica con un caracter, el que por defecto es un " ".
·strcmp: Funcion que se usa para la comparacion de dos strings.
Reply
#5

Hola y gracias por responderme a todos:

Lunnatiicz :: no sabia el BBCODE del [*pawn*] [*/pawn*] y como no aparacecia nada en el editor jejeje
lo tomare en cuenta para futuros post XD
їStrcmp Es el proceso de comandos?, no es para comparar cadenas?

OwlCity :: gracias por arregarmelo jeje ,pero Sigo sin entender, segun tu:
pawn Код:
cmd = strtok(cmdtext, idx); //Guarda en la cadena cmd la variable que encuentre la funciуn tras el
//espacio encontrado en cmdtext
//idx sirve para saber la posiciуn de la cadena en la que se encuentra el espacio, no debe importarte
///Entoncs si pongo "/kick 2", "cmd" seria = "2", ya q el 2 se encuentra tras el espacio їno?
if(strcmp(cmd, "/kick", true) == 0)
//strcmp: si devuelve 1, la cadena 1 es mayor que la 2.  Si devuelve 0 son iguales (como en este caso).
// SI devuelve -1 la cadena 1 es menor a la 2
///Aca 2 dudas, "cmd" valdria "2" y "2" no es = que "/kick", ni aca ni en la china jejeje
///Entoncs nunca daria q son = esa comparacion
///La otra duda, Cadena 1 Mayor o menor q la cadena 2, їte refieres a la longitud?, si la longitud de la cadena
/// 1 es mayor que de la cadena 2?, La otra duda
/// No entiendo bien del "Return" Pense que "return 0" acaba la funcion?
the_chaoz :: Que Casualidad jeje Justo ese tutorial que dices q creo q es este https://sampforum.blast.hk/showthread.php?tid=225796 lo voy a imprimir para aprender jeje espero estar al nivel de todos ustedes jeje en programacion pawn XD

Espero no haberlos Molestado, GRACIAS por ayudarme y no solo ami si no a otros q no entienden muy bien como yo, espero q me sigan ayudando jeje
Reply
#6

Te recomiendo aprender algo de ingles, ya que si para todo debes utilizar el traductor, estas fregado.
Reply
#7

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
·strcmp: Funcion que se usa para la comparacion de dos strings.
Quote:
Originally Posted by superpol1
Посмотреть сообщение
їStrcmp Es el proceso de comandos?, no es para comparar cadenas?
Yo le hago caso al sabio n__n'

El "return 1;" termina la funciуn/comando, si usas "return 0;" el callback ya no se ejecutarб, puedes cambiar ese 0 por un mensaje, pero уjo!

EL "return 0;"! Es hasta el fin del callback!

Quote:

return SendClientMessage(playerid, COLOR, "Comando errуneo, utiliza /ayuda");

Saludos!

EDIT: No te compliques tanto la vida, strcmp usa sуlo los comandos, de ahн para abajo sus funciones, sobre el cmd = strtok te recomiendo leerlo en un tutorial que vн por aquн.

Saludos! de nuevo ._.
Reply
#8

Bueno haciendo yo mis propias pruebas pude entender que hace el strtok y como funca XD.
Tambien entendi el strcmp...
Ya me lei toda la guia de The_Chaoz
Y leaNN tienes razon pero me guio con el traductor x q si lo tomo tal como me dice el traductor ******, estoy fregado XD, Es Buen traductor pero NO ES PERFECTO XD
Lunnatiicz: thx x la ayuda pero todavia nu entiendo bien el return supongo q con + uso lo hago XD.
Tengo otra Duda Pero creo q habro otro Post Gracias A todos por la ayuda
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)