Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?
Mostrando postagens com marcador Strings. Mostrar todas as postagens
Mostrando postagens com marcador Strings. Mostrar todas as postagens

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()

Apostila de C - Ponteiros, Vetores, Matrizes e Strings (Listas 4 e 5)

Neste tutorial de nossa Apostila C Progressivo, iremos exibir as questões da apostila de C da UFMG sobre os assuntos de Ponteiros, Vetores, Matrizes e Strings, e em seguida iremos comentar cada uma das questões, códigos e dar o gabarito correto dos exercícios.

Exercícios propostos sobre Strings

Usando os conceitos ensinados aqui em nossa apostila de C, especificamente sobre Strings em C, crie funções que façam as seguintes tarefas:

Como implementar as funções da biblioteca string.h

Nós falamos, aqui em nossa apostila de C, no tutorial sobre as funções da biblioteca string.h, das principais funções e como usá-las.

Porém, é um excelente exercício tentar implementá-las!
Isso mesmo, tente criar sua própria biblioteca em C, que trata strings.
Fazendo isso, garantimos que você terá total domínio sobre as tão 'temidas' strings, em C.

strcpy - Como copiar uma string em C

  • strcpy: char *strcpy( char *dest, char *orig );
Fornecemos a string de origem e ela é copiada e armazenada na string de destino, não importando como era a string de destino anteriormente.


strlen - Como calcular o número de caracteres em uma string

  • strlen: int strlen( char *str );
A função strlen() retorna o número de caracteres contidos na string str, sem contar com o caractere delimitador \0.

memcmp - Saber se uma string é menor, maior ou igual a outra

  • memcmp: int memcmp( char *str1, char *str2, int n );
Vamos aprender como implementar a função memcmp(), que recebe duas strings e compara seus 'n' primeiros elementos, de forma lexicográfica.

Se a string 1 for menor que a string 2, retorna -1.
Se a string 1 for maior que a string 2, retorna 1.
Se as strings forem iguais, retorna 0.

memcpy - Copiando caracteres de uma string para outra

  • memcpy: char* memcpy( char *dest, char *src, int n );

Copia os 'count' primeiros caracteres da string 'src' e coloca nas primeiras 'count' da string 'dest'.

A biblioteca string.h e suas funções

Trabalhar com strings, em C, não é nada óbvio, precisamos treinar bastante até ter total controle dos caracteres de nosso texto.

Essa dificuldade se torna ainda maior se você já tiver estudado outra linguagem de programação, como Java, Perl ou Python, onde a manipulação de texto é extremamente óbvia e simples.
Mas essa simplicidade toda não vem de graça, requer custos: processamento e memória de um computador.

Vamos agora, em nossa apostila de C, apresentar as principais funções para manipulação de strings, como usá-las e melhor: como criá-las! Sim, vamos criar funções de manipulação de strings para você saber como tudo funciona em C e como exercícios.

Como criar uma biblioteca em C

Vamos dar uma pausa em nossa apostila de C, especificamente sobre na seção de strings, para ensinar uma importante lição de organização.

Vamos aprender a criar e usar uma biblioteca, um header, que são aqueles arquivos de extensão .h que usualmente colocamos após o #include.

Lendo e Escrevendo Strings em C

Que 99,99% dos aplicativos em C, ou de qualquer outra linguagem, usam strings e caracteres para mostrar textos, nós já convencemos você.

Mas só mostrar não adianta muita coisa, geralmente é preciso receber strings do usuário.
Afinal, quem nunca forneceu o nome pra ficar no ranking daquele jogo, data e local de nascimento, nome dos pais e outros tipos de texto?

Nesse tutorial sobre strings em C, vamos ensinar como receber textos do usuário.

Introdução as strings: o que são, como declarar e inicializar – O Operador \0

 Após nosso estudo sobre vetores e das noções sobre ponteiros, vamos usar esses conhecimentos obtidos em nosso curso online de C.

Tente achar um programa que não tenha nada escrito. Que não seja necessário ler ou informar alguma letra ou palavra.
Até nas calculadoras temos que inserir caracteres (+, -, *, % etc).

Essa seção é totalmente dedicada a escrita, suas bibliotecas, funções, funcionamento e detalhes. Sim, vamos aprender a escrever em C, nesta seção de nossa apostila.

Inicializando vetores – Vetor de caracteres e Lixo

Agora que você aprendeu o que são vetores, como declarare viu alguns exemplos de seu uso, vamos explicar um pouco mais sobre a inicialização de vetores e os cuidados que devemos ter ao manipular vetores, ou arrays, em C.

Aproveitando o assunto sobre cuidados com vetores, vamos mostrar neste tutorial de nossa apostila de C o que são os ‘lixos’ que ficam nos vetores (e variáveis), como nos vetores de caracteres.