paulo1205
(usa Ubuntu)
Enviado em 28/11/2019 - 04:08h
DeuRuimDotCom escreveu:
Pedindo licença, não estou convencido da resposta. "strchr()" de "<string.h>" se adequaria realmente às condições dadas no questionamento?
Posso estar errado, mas não consigo conceber um algoritmo que, no pior caso, não tenha de varrer o vetor por inteiro (claro, numa busca completamente "no escuro").
Eu pensei a mesma coisa quando escrevi a resposta original. Olhando pelo lado em que o autor da pergunta disse que não queria usar laços de repetição para verificar elemento por elemento, meu primeiro impulso foi o de dizer que isso era impossível.
Contudo, a mensagem tinha um outro lado, que indagava se não haveria algum mecanismo da linguagem ou uma função que pudesse ser usada para obter o resultado que ele desejava. Essa indagação não me pareceu estender a restrição quanto a fazer uma varredura dos elementos para dentro da construção ou função. Nesse caso, a resposta correta é “sim”, pois tal função existe.
Eu fiquei seriamente tentado a chamar a atenção para o fato de que a função não dispensa a operação de varredura, mas eu acabei decidindo não explicitar isso por dois motivos: o primeiro e mais importante é que minha esposa estava insistindo para que eu fosse dormir, e o segundo é que eu achei que isso seria chover no molhado, pois nosso colega poderia facilmente chegar — e espero que tenha chegado — à correta conclusão de que o uso da função é apenas uma conveniência visual na hora de escrever o programa, mas que não apenas não o exime do custo da verradura, como ainda pode ter o custo adicional relacionado à chamada de funções (possivelmente irrelevante para compiladores com otimização e
inlining automático, mas mais relevante no caso de compilações em que a otimização não existe ou não pode ser usada).
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)