04/09/2021 12:42
tutorial de como utilizara a porra do strtok... ( para eu mesmo não esquecer e/ou os outro aprenderem a utilizar! )
strtok serve para achar string após o ESPAÇO " ", a galera utiliza bastante para argumentação ( comum em gm antiga ), mesmo tendo outros concorrentes
como sscanf.
strtok (str1,&index);
exemplo (irei usar strcmp):
Resumidamente:
o strtok, pega a proxima string depois do espaço.
exemplo:
e assim vai, pegando string pós espaço!
ok, porque IDX?
* idx, seria INDEX, seria quantidade de elementos seria para capturar.
exemplo
resumidamente, o INDEX 0, deixa INFININTO o numero de argumentos,
já INDEX 1, se limite a 2
INDEX 2, se limita a 3
INDEX 3, se limita a 4
...........4................5
..........6................7
......
....
e assim por diante..
strtok serve para achar string após o ESPAÇO " ", a galera utiliza bastante para argumentação ( comum em gm antiga ), mesmo tendo outros concorrentes
como sscanf.
strtok (str1,&index);
exemplo (irei usar strcmp):
Código:
public OnPlayerCommandText(playerid, cmdtext[]){
new cmd[128];
new tmp[128];
new idx;
comando_cortado = strtok(cmdtext, idx);
if(strcmp(comando_cortado,"/comado",true)==0){ // jogador usa /comando [argumento1] [argumento2] [argumento3]
new var1[20];
new var2[20];
new var3[20];
var1= strtok(cmdtext, idx); // var1 vira argumento 1
var2= strtok(cmdtext, idx); // var2 vira argumento 2
var3 = strtok(cmdtext, idx); // var3 vira argumento 3
if(!strlen(var1)){ // comparar o tamanho da string, se for 0 ( nada ) vai retornar printar
printf("argumento var1 não encontrado!");
}
if(!strlen(var2)){
printf("argumento var2 não encontrado!");
}
if(!strlen(var3)){
printf("argumento var3 não encontrado!");
}
}
}
Resumidamente:
o strtok, pega a proxima string depois do espaço.
exemplo:
Código:
new idx=0;
string = "FEIJOADA È MUTO BOM SABIA"
\/ | \/ \/ \/
0 1 2 3 4
strtok(string,idx) = FEIJOADA
strtok(string,idx) = É
strtok(string,idx) = MUITO
strtok(string,idx) = BOM
strtok(string,idx) = SABIA
strtok(string,idx)....
e assim vai, pegando string pós espaço!
ok, porque IDX?
* idx, seria INDEX, seria quantidade de elementos seria para capturar.
exemplo
Código:
new idx = 1
string = "porta samp ok"
strtok(string,idx) = "orta" // index[0]
strtok(string,idx) = "amp" //index[1]
strtok(string,idx) = "" //index[3] // Não apareceu porque exerceu o limite definido no INDEX
resumidamente, o INDEX 0, deixa INFININTO o numero de argumentos,
já INDEX 1, se limite a 2
INDEX 2, se limita a 3
INDEX 3, se limita a 4
...........4................5
..........6................7
......
....
e assim por diante..
Código:
stock strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Citar:
Gostou do meu conteúdo? que tal me ajudar com alguma reputação? ( Estrela )