Ir ao conteúdo

Posts recomendados

Postado

Boa tarde a todos.

Me deparei com uma situação na qual preciso comparar um vetor de wchar_t com mais de 100 outros, e imagino que isso deveria ser um trabalho para o switch/case, por conta da eficiência quando comparado ao if/else.

Há alguma forma de fazer isso? E se há, seria mais eficiente do que um monte de if/else contendo a função wcscmp()?

Eu dei uma olhada por aí para saber primeiro se há como fazer isso com strings comuns, mas prefiro não confiar em qualquer coisa, e se fosse testar um por um, iria demorar um bom tempo pra digitar tudo.

Agradeço pela ajuda.

  • Amei 1
Postado

@Flávio Pedroza

12 minutos atrás, Flávio Pedroza disse:

O melhor é você usar um vetor/array.

Eu já testei com um monte de condicionais if contendo a função wcscmp(), que acaba sendo pouco eficiente e levando um tempo considerável de processamento, porque são mais de 100 comparações. Desse jeito que você mostrou não da no mesmo? Já que também vão ser comparações usando a condicional if.

Minha dúvida era como usar switch/case com vetores de char ou wchar_t, e se seria mais eficiente do que if/else.

  • Curtir 1
Postado
6 horas atrás, Lucca Rodrigues disse:

um vetor de wchar_t com mais de 100 outros, e imagino que isso deveria ser um trabalho para o switch/case, por conta da eficiência quando comparado ao if/else.

Há alguma forma de fazer isso? E se há, seria mais eficiente do que um monte de if/else contendo a função wcscmp()?

Eu dei uma olhada por aí para saber primeiro se há como fazer isso com strings comuns, mas prefiro não confiar em qualquer coisa, e se fosse testar um por um, iria demorar um bom tempo pra digitar tudo

 

 

Esse tipo é definido pela implementação e em geral é apenas um unsigned short 

 

Comparar vetores desses numa máquina moderna é ultra-rápido. Não há muito que otimizar. Basta deixar o compilador se virar.  wcscmp() recebe dois ponteiros desse tipo, e um array é a coisa mais rápida de acessar que existe.

 

if() e switch() devem gerar exatamente o mesmo código. Veja esse exemplo no compiler explorer com o gcc 9.3 como alvo:
 

image.thumb.png.73831abdbfa97528f9260b4fc7332143.png

 

o if() está na linha 7. o switch na 19. O tipo não vai mudar a geração de código.

 

Unicode é outra história, já que o comprimento é variável até 4 bytes, e recomendo esquecer a menos que:

  • esteja em falta de problemas e queira começar por um grande
     
  • vá ser muito bem pago
  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!