Ir ao conteúdo
  • Cadastre-se

C Switch/case com vetor de wchar_t


Lucca Rodrigues

Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!