Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

Como comparar strings em C: Diferenças entre strcmp() e strncmp()

Qual a melhor, mais recomendada e mais eficiente maneira de comparar duas strings, em linguagem C?

Qual função é a mais rápida: strcmp() ou strncmp() ?

Qual a diferença? O que cada uma faz? Qual maneira é a mais indicada?


Teste de velocidade: strcmp() ou strncmp() ?

Sem mais delongas, vamos fazer um simples teste, comparando o tempo de execução das duas funções que comparam strings:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>
  4.  
  5. int main() {
  6. char str1[] = "Curso C Progressivo";
  7. char str2[] = "Curso C Progressivo";
  8. long tempo1, tempo2;
  9. int i, j, k;
  10.  
  11. tempo1 = clock();
  12. for(i=0 ; i<10000 ; i++)
  13. j = strcmp(str1, str2);
  14.  
  15. tempo2 = clock();
  16. printf("%ld\n", tempo2-tempo1);
  17.  
  18. tempo1 = clock();
  19. for(i=0 ; i<10000 ; i++)
  20. j = strncmp(str1, str2);
  21.  
  22. tempo2 = clock();
  23. printf("%ld\n", tempo2-tempo1);
  24. }

Neste teste, bem rudimentar, fazemos mil comparações, usando as funções. Usamos a biblioteca time.h para usar a função clock(), que pega o tempo atual do sistema, para fazermos uma espécie de cronômetro.

Resultado dos tempos de execução:

strcmp: 820
strncmp: 866

Ou seja, strcnmp foi levemente mais rápida, mas neste caso


Qual a diferença entre strcmp() e strncmp() ?

strcmp e strncmp são funções de biblioteca padrão da linguagem C, para comparar strings tanto no C como no C++. No entanto, eles têm algumas diferenças em termos de desempenho e funcionalidade.

strcmp compara duas strings terminadas em null e retorna 0 se forem iguais, um valor menor que 0 se a primeira string for lexicograficamente menor que a segunda string e um valor maior que 0 se a primeira string for lexicograficamente maior que a segunda string. Ele compara as duas strings, caractere por caractere, até encontrar uma diferença ou atingir o final de qualquer uma das strings.

strncmp funciona de forma semelhante a strcmp, mas compara no máximo n caracteres. Isso significa que se n caracteres forem comparados e forem iguais, strncmp retornará 0 mesmo se houver caracteres adicionais em qualquer uma das strings. Isso pode ser útil quando você só precisa comparar uma parte das strings e não deseja comparar a string inteira.

Em termos de desempenho, strncmp geralmente é mais rápido que strcmp porque compara apenas um número especificado de caracteres, portanto, pode parar antes se as duas strings não forem iguais. No entanto, isso também significa que strncmp pode não fornecer uma comparação precisa de todas as strings. Além disso, se n for definido como um valor grande, strncmp pode ser mais lento que strcmp porque precisa comparar mais caracteres.

Portanto, a escolha entre strcmp e strncmp depende do seu caso de uso específico. Se você precisar comparar as strings inteiras, strcmp é a função apropriada a ser usada. Se você precisar comparar apenas uma parte das strings, strncmp pode ser mais indicado.

Vale a pena você conhecer e estudar uma nova função, chamada:

strcpy_s()

Nenhum comentário: