Dudas con Strcmp() -
Lunnatiicz - 04.05.2011
Muy buen dнa a todos, ya mucho sin postear algo en el foro, pero empiezo a meterme mбs a fondo en pawn, poco a poco algo nuevo se va aprendiendo, no me considero un programador avanzado, dado a que aъn hay muchнsimas mбs cosas que no se.
Y este post, dirй algunas de ellas, si me las puede resolver, ЎQuй gusto!.
Dado a que aъn prosigo en la creaciуn del Freeroam (Mi proyecto), Antes de pasar a la secciуn entera de los callbacks, quiero que me quede claro lo siguiente, ya que la wiki sуlo da 2 ejemplos, usando strtok & no usando.
No sabrй como darme a explicar lo siguiente.
- Funciones usando if(strcmp)
pawn Код:
if (!strcmp("/laseron", cmdtext, true))
- їPorquй en йsta funciуn, antes de "strcmp" se usa un "!"?
pawn Код:
if (strcmp( cmdtext, "/kill", true))
- їPorquй en esta funciуn, "cmdtext" va antes del comando escrito?
pawn Код:
if (strcmp( cmdtext, "/colores", true) == 0)
- їPorquй acб se usa un " == 0)" y en casos varнa el valor?
- En ambos casos,їPorquй se usa en unos cmdtext & en otros sуlo cmd?
pawn Код:
if (strcmp("/reglas", cmdtext, true, 10) == 0)
- їPorquй acб se agregan la cantidad de caracteres del comando + == 0?
&- їPorquй cmdtext ahora se usa despuйs a comparaciуn del 1er comando?
No me considero un buen scripter, mбs sin embargo, de los errores se aprende, prefiero no quedarme con la duda, a hacer todo mal & al ъltimo se le critique al trabajo.
Si pueden ayudarme, ЎMil gracias!.
Quizбs no me di a entender, si por ahн hay una forma de aprender esto, sin explicar cada cosa, le agradecerнa a aquйl que me lo facilitara
Respuesta: Dudas con Strcmp() -
[J]ulian - 04.05.2011
strcmp es de string comparate (?) o algo asн xD, 0 ingles. Pero lo que hace es comparar dos strings.
El orden no altera el producto (?), por lo tanto, Comparar cmdtext con /kill es lo mismo que comparar /kill con cmdtext.
El !, cumple la misma funciуn que == 0. Por lo tanto, si pones uno, no es necesario el otro.
Lo del CMD es por lo del strtok, pero no tiene porquй ser cmd, puede ser PENE
new pene[256], idx;
pene = strtok(cmdtext, idx);
if(!strcmp(pene, "/kill", true))
Creo que eran esas las dudas, si no eran, decime porque no entendн un corno xD
Respuesta: Dudas con Strcmp() -
Lunnatiicz - 04.05.2011
Quote:
Originally Posted by [J]ulian
El !, cumple la misma funciуn que == 0. Por lo tanto, si pones uno, no es necesario el otro.
Lo del CMD es por lo del strtok, pero no tiene porquй ser cmd, puede ser PENE
new pene[256], idx;
pene = strtok(cmdtext, idx);
if(!strcmp(pene, "/kill", true));
|
Jaja, un poco de humor en programaciуn no esta mal e.e
Mil gracias, creo haberte entendido perfectamente

aunque no entendнas un corno de que hablaba xD
Saludos!
P.D Tanto post para algo simple xd lol
EDIT: Otra cosa xD Lo ъltimo del post, їPorquй en la funciуn que me diste con "!" no se cuentan los caracteres como en la ъltima?
Respuesta: Dudas con Strcmp() -
[J]ulian - 04.05.2011
Ahн justo habнa editado:
"strcmp es de string comparate (?) o algo asн xD, 0 ingles. Pero lo que hace es comparar dos strings."
Respuesta: Dudas con Strcmp() -
Lunnatiicz - 04.05.2011
Quote:
Originally Posted by [J]ulian
Ahн justo habнa editado:
"strcmp es de string comparate (?) o algo asн xD, 0 ingles. Pero lo que hace es comparar dos strings."
|
Entonces si usamos la funciуn contando caracteres o no es igual? ._.
Re: Dudas con Strcmp() -
admantis - 04.05.2011
їQuй dices?
Strcmp funciona de la manera de que compara las dos cadenas que tъ has escogido. Entonces de cada cadena se borra una letra hasta que todas sean iguales, si no, se detiene y returna el valor que queda, por ejemplo.
pawn Код:
hola
ola
La 'a', luego la 'l' luego la 'o'. Pero la 'h' no estб, asi que returna el valor que quedaba.
Segundo ejemplo:
hola
hola
La 'a', luego la 'l', luego la 'o', luego la 'h'. No quedan letras, returna cero.
Es decir, que el == 0 se agrega si el resultado de esa comparaciуn es cero (todas las letras comparadas son iguales). De igual manera que poner el signo contrario '!', si strcmp returnarнa cero en este caso no.
Por lo tanto, es un error comъn de los novatos hacer esto:
pawn Код:
new szName[24+1];
GetPlayerName(playerid, szName, 24+1);
if (strcmp(szName, "Lunnatiicz"))
{
return SendClientMessage(playerid, -1, "Lunnatiicz");
}
Y se preguntan porque su cуdigo no funciona (strcmp returnarнa cero si las dos strings son iguales).
pawn Код:
new szName[24+1];
GetPlayerName(playerid, szName, 24+1);
if (strcmp(szName, "Lunnatiicz") == 0)
{
return SendClientMessage(playerid, -1, "Lunnatiicz");
}
El caso correcto serнa el de arriba ya que se especifica si el valor es cero (lo que returna strcmp si las dos cadenas comparadas son iguales).
Es por eso que en los comandos strcmp (los cuales son obsoletos, viejos, lentos, o como los querais llamar) funcionan asн:
pawn Код:
if (strcmp( cmdtext, "/hacermeadmin", true) == 0)
// cmdtext es el valor dado a OnPlayerCommandText, es una cadena que es igual a el comando que escribe.
// true es ignorar diferencia de mayъsculas y minъsculas
// == 0 es que si el valor es cero (toda la cadena comparada es igual) hacer algo.
Rбpidamente te digo que no es necesario poner la cantidad de carбcteres (y la mayorнa de la gente siempre pone diez) ya que al tener comandos muy largos puede causar malfuncionamiento.
Espero haberte ayudado.
Respuesta: Dudas con Strcmp() -
Lunnatiicz - 04.05.2011
Perfecto Admantis.
Gracias e.e
Re: Dudas con Strcmp() -
admantis - 04.05.2011
De nada. He editado mi post con un poco mбs de informaciуn.
Respuesta: Dudas con Strcmp() -
Lunnatiicz - 04.05.2011
Dado a lo ъltimo que dijiste, entonces.
pawn Код:
if (strcmp( cmdtext, "/hacermeadmin", true) == 0)
Serнa igual a
pawn Код:
if (!strcmp( cmdtext, "/hacermeadmin", true))
O:
Asн les entendн a Julian & a ti xD
Respuesta: Dudas con Strcmp() -
Zoutdaxv - 04.05.2011
pawn Код:
if(strcmp("/reglas", cmdtext, true) == 0)
Es lo mismo que:
pawn Код:
if(!strcmp("/reglas", cmdtext, true))
0 o cero es como un valor nulo, si vale 1 o -1 ya no lo serб.
"/reglas" puede ir asн:
pawn Код:
if (strcmp("/reglas", cmdtext, true, 10) == 0)
o asн:
pawn Код:
if (strcmp(cmdtext, "/reglas", true, 10) == 0)
Para el uso que se le da es igual, el 10 es el nъmero de caracteres a comparar, por ejemplo:
pawn Код:
if (strcmp("Hola a todos", "Hola", true, 4) == 0)
{
print("VERDAD");
} else print("FALSO");
Eso imprimirнa en la consola:
Pero si no especнficas el nъmero de caracteres:
pawn Код:
if (strcmp("Hola a todos", "Hola", true) == 0)
{
print("VERDAD");
} else print("FALSO");
imprimirнa :
Donde va 'true' es "ignorecase", si es 'false' serб sensible a mayъsculas y estб por defecto en 'false':
pawn Код:
if (strcmp("Hola a todos", "Hola", false) == 0)
Serнa lo mismo quй:
pawn Код:
if (strcmp("Hola a todos", "Hola") == 0)
La funciуn nativa:
pawn Код:
native strcmp(const string1[], const string2[], bool:ignorecase=false, length=cellmax);