problema con strfind
#1

bueno estoy empezando a usar strfind y me salio un problema

la idea es que la funcion strfind intervenga en la funcion sendclientmessage
lo logre , pero aqui el problema al ser un SendClientMessage basico

EJ: si el strfind buscara la palabra "hola"

Quote:

SendClientMessage(playerid,ROJO,"hola");

lo reconoce perfecto, pero a la hora de usar un string

Quote:

new string[5]:
new mensaje = hola;
format(string,sizeof(string),"%s", mensaje);
SendClientMessage(playerid,ROJO,string);

PD: el string[5]: es solo un ejemplo (para evitar confuciones)

no me lo reconoce, he aqui la pregunta

їComo hacer que el strfind tambien funcione cuando hay un string de por medio?

Saludos...
Reply
#2

tomando en cuenta que tu ejemplo esta mal, dado que le asignas un texto a una variable, cuando deberias asignarselo a un array, y que dices q tu problema esta con strfind y no dices cual fue tu problema xq en el ejemplo no has usado strfind, voy a darte un ejemplo de como usar strfind.

pawn Код:
public OnFilterScriptInit()
{
    new string[20], substring[8], pos;//definicion de arrays y una variable
    string = "Este es un ejemplo.";//le asignamos al array string el texto
    substring = "ejemplo";//le asignamos al array substring el texto
    pos = strfind(string, substring, true);//buscamos dentro del string, el substring
    if(pos != -1)print("Se encontro \"ejemplo\" dentro del texto");//si se encontro...
    else print("No se encontro \"ejemplo\" dentro  del texto.");//de lo contrario...
    return 1;
}
Reply
#3

mmm

lo que ise es incorporar strfind en otro sen....

sabes mejor lo pongo

aca un ejemplo

Quote:

stock SendClientMessage2(playerid, color, const message[])
{
if(strfind(message,"_",true) == -1)
{
SendClientMessage(playerid,ROJO,"has usado un _");
return 1;
}
else
{
SendClientMessage(playerid,color,message);
return 1;
}
}

esa es la funcion de sendclientmessage2
la cual si strfind encuentra "_" en la cadena message
te manda un mensaje diciendo que has usado "_"
sino te manda el mensaje correctamente
ahora al caso
si esta esto:

Quote:

SendClientMessage2(playerid,ROJO,"aca hay un '_' ");
o
SendClientMessage2(playerid,ROJO,"aca no hay un guion bajo asi que deberia mandarse normalmente");

en el primer ejemplo te mandara el mensaje "has usado un _" ya que encontro un _
y en el segundo mandara esto "aca no hay un guion bajo asi que deberia mandarse normalmente", es decir lo mando bien

aca surge el problema

si hago esto (mismos ejemplos)
Quote:

new string[64];
mensaje1 = aca hay un '_';
format(string,64,"Camilo dijo: %s", mensaje1);
SendClientMessage2(playerid,ROJO,string);
o
new string[64];
mensaje2 = aca no hay un guion bajo asi que deberia mandarse normalmente;
format(string,64,"Camilo dijo: %s", mensaje2);
SendClientMessage2(playerid,ROJO,string);

lo que daria como resultado esto:

en el primero mandaria "aca hay un '_' " que es el mensaje siendo que strfind tiene la condicion de que si encuentra un _ mande "has usado un _" pero no lo hace
en el segundo es lo mismo porque no tiene _ asi que en realidad ese da lo mismo

el que me preocupa es el primero del segundo ejemplo ya que strfind busca _ en message, donde message tambien esta "creado" por otra varible, en este caso "Mensaje1"

PD: puede que hayan errores en los ejemplos, pero es solo para que entiendan

Saludos...
Reply
#4

no termine de entenderte muy bien, pero fijate si esto te sirve.
pawn Код:
stock SendClientMessage2(playerid, color, const text[])
{
    new string[64];
    if(strfind(text, "_", true) == -1){
        mensaje1 = aca hay un '_';
        format(string,64,"Camilo dijo: %s", mensaje1);
        return SendClientMessage2(playerid,ROJO,string);
    }
    else{
        mensaje2 = aca no hay un guion bajo asi que deberia mandarse normalmente;
        format(string,64,"Camilo dijo: %s", mensaje2);
        return SendClientMessage2(playerid,ROJO,string);
    }
}
si eso no te funciona aca otra forma de hacer lo mismo, por asi decirlo mucho mas bruta.

pawn Код:
stock SendClientMessage(playerid, color, const text[]){
    new string[64], i;
    while(i<strlen(text)){
        if(text[i] == '_'){
            mensaje1 = aca hay un '_';
            format(string,64,"Camilo dijo: %s", mensaje1);
            return SendClientMessage2(playerid,ROJO,string);
        }
        else{
            mensaje2 = aca no hay un guion bajo asi que deberia mandarse normalmente;
            format(string,64,"Camilo dijo: %s", mensaje2);
            return SendClientMessage2(playerid,ROJO,string);
        }
        i++;
    }
}
Reply
#5

Gracias The_Chaoz pero no te entendi y me fui por otros rumbos hasta que encontre lo que buscaba y no era con strfind

te lo agradesco mucho

Saludos...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)