Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Entrar

description[Func] PP_strcomp (comparador de strings) Empty[Func] PP_strcomp (comparador de strings)

more_horiz
Olá, ontem eu fui até o programador Josma_CMD com a hipótese de usar o strcmp para comparar se as strings (não são) iguais, depois de algumas tentativas chegamos à conclusão de que o strcmp não tem muita lógica, diante disso, ele criou uma função semelhante ao strcmp padrão porem, com a opção de verificar se as strings são compatíveis ou não.

Código:

PP_strcomp(stringA[], stringB[], maxcell, bool: index)
{
  new PP = -1; //-1 usado para que o operador incremental possa ser usado no próprio laço do loop
  if(index == true) //Caso as duas strings sejam compativeis
  {
    new bool: compativel = true; //Seta para true, caso compatível passará pelo loop e ainda será true
    while(++PP < maxcell)
    {
      if(strlen(stringA[PP]) != strlen(stringB[PP])) { compativel = false; } //Torna false caso incompatível
    }
    if(compativel == false) return false; //Se não for compatível retornará à false
    if(compativel == true) return true;  //Se ainda for compatível retornará à true
  }
  else if(index == false) //Caso as duas strings sejam incompativeis
  {
    new bool: compativel = true; //Seta para true, caso compatível passará pelo loop e ainda será true
    while(++PP < maxcell)
    {
      if(strlen(stringA[PP]) != strlen(stringB[PP])) { compativel = false; } //Torna false caso incompatível
    }
    if(compativel == false) return true; //Se não for compatível retornará à true
    if(compativel == true) return false; //Se ainda for compatível retornará à false
  }
  return false;
}


O código abaixo foi usado com intuito de testar a função, chame ela no OnGameModeInit e veja o resultado na tela do console.

Código:

CallBack::TestarSTRCMP()
{
  if(PP_strcomp("Josma", "Josma", 5, true)) //true para verificar se as strings SÃO iguais.
  {
    print("Josma é igual Josma");
  }
  if(PP_strcomp("Josma", "Progressao", 5, false)) //false para comparar se as strings NÃO SÃO iguais.
  {
    print("Josma não é igual Progressao");
  }
  //***********[ Teste de bug ]**************
  if(PP_strcomp("Josma", "Josma", 5, false)) //false para comparar se as strings NÃO SÃO iguais.
  {
    print("Josma não é igual Josma");
  }
  if(PP_strcomp("Josma", "Progressao", 5, true)) //true para verificar se as strings SÃO iguais.
  {
    print("Josma é igual Progressao");
  }
  return true;
}


Créditos: Josma_CMD

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
Então ela substitui o strcmp é isso?

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
Marlon_Lorran escreveu:
Então ela substitui o strcmp é isso?


Não é uma substituição(por enquanto) mas sim uma alternativa já que ela quebra a anti lógica do strcmp podendo comparar valores negativos também.
Vou aperfeiçoar, tentar achar bugs e melhorar a lógica pra lançar oficialmente como um substituto ao strcmp.

Chainksain, obrigado por postar. ^^

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
Excelente trabalho Josma!

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
Meus parabens pelo codigo, ficou incrivel!

Fiz algumas adaptações no codigo, para não ser preciso inserir o numero de caracteres, ficando mais semelhante ao original "strcmp", por favor avaliem!

http://pastebin.com/8aya51mh

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
Christian_David escreveu:
Meus parabens pelo codigo, ficou incrivel!

Fiz algumas adaptações no codigo, para não ser preciso inserir o numero de caracteres, ficando mais semelhante ao original "strcmp", por favor avaliem!

http://pastebin.com/8aya51mh


Fiz o código com o parâmetro maxcell pra se tornar mais completo. ^^
Mas como você deu essa alternativa de retirar o maxcell, modifiquei o meu código inicial para que dispense o maxcell usando o operador condicional, assim, adicionei apenas uma linha ao código sem precisar de toda aquela estrutura de verificação que você fez.

Código:

PP_strcomp(stringA[], stringB[], bool: index)
{
   new maxcell = (strlen(stringA) < strlen(stringB)) ? strlen(stringB) : strlen(stringB);
   new PP = -1; //-1 usado para que o operador incremental possa ser usado no próprio laço do loop
   if(index == true) //Caso as duas strings sejam compativeis
   {
       new bool: compativel = true; //Seta para true, caso compatível passará pelo loop e ainda será true
       while(++PP < maxcell)
       {
           if(strlen(stringA[PP]) != strlen(stringB[PP])) { compativel = false; } //Torna false caso incompatível
       }
       if(compativel == false) return false; //Se não for compatível retornará à false
       if(compativel == true) return true;  //Se ainda for compatível retornará à true
    }
    else if(index == false) //Caso as duas strings sejam incompativeis
    {
        new bool: compativel = true; //Seta para true, caso compatível passará pelo loop e ainda será true
       while(++PP < maxcell)
       {
           if(strlen(stringA[PP]) != strlen(stringB[PP])) { compativel = false; } //Torna false caso incompatível
       }
        if(compativel == false) return true; //Se não for compatível retornará à true
        if(compativel == true) return false; //Se ainda for compatível retornará à false
    }
    return false;
}


Linha adicionada:

Código:

new maxcell = (strlen(stringA) < strlen(stringB)) ? strlen(stringB) : strlen(stringB);

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
nada mal chainksain mais eu sei que da pra fazer melhor hehe

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
weslley_Killer escreveu:
nada mal chainksain mais eu sei que da pra fazer melhor hehe

Você não deve ter lido o tópico...
De qualquer forma. Melhorar sempre dá, pode citar onde e como?

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
Josma escreveu:
weslley_Killer escreveu:
nada mal chainksain mais eu sei que da pra fazer melhor hehe

Você não deve ter lido o tópico...
De qualquer forma. Melhorar sempre dá, pode citar onde e como?

certeza cara, estamos aberto a opiniões sempre né (y)

description[Func] PP_strcomp (comparador de strings) EmptyRe: [Func] PP_strcomp (comparador de strings)

more_horiz
privacy_tip Permissões neste sub-fórum
Não podes responder a tópicos
power_settings_newInicie sessão para responder