Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?
Mostrando postagens com marcador Apostila de C. Mostrar todas as postagens
Mostrando postagens com marcador Apostila de C. 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()

Filas em C - Como Programar (Tutorial de C sobre Queue - Estrutura de Dados)

Neste Tutorial de C de nossa apostila online, vamos falar sobre uma importante estrutura de dados dinâmica, que é a fila.

Junto com as listas encadeadas e as pilhas em C, formam o conjunto de estrutura de dados mais importantes e usados.

Pilhas (Stack) em C - O Que É e Como Implementar (Tutorial de C Estrutura de Dados)

Neste Tutorial de C, vamos falar sobre uma das estrutura de dados mais importantes da computação, que são as pilhas (stack, em inglês).

Vamos entender o que são pilhas, para que servem, como implementar e programar uma, do zero.

Apostila de C - Arquivos, Entra e Saída Padrão (Lista 7)

Neste tutorial de nossa Apostila C Progressivo, iremos propor para os leitores de nosso curso uma série de questões que foram criadas pelo Curso de C da UFMG, e presentes em sua apostila, sobre os assuntos de Arquivos, Entrada e Saídas padronizadas em C.

Em seguida, iremos resolver, dar o gabarito e comentar todos os códigos.

Apostila de C - Função (Lista 6)

Neste tutorial de nossa Apostila C Progressivo, vamos propor as questões do Curso de C da UFMG sobre o assunto Função, em seguida iremos comentar e resolver cada um dos exercícios.

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.

Apostila de C - Testes Condicionais (IF-ELSE e SWITCH-CASE), Laços (FOR e WHILE) e Operador Ternário (? :) (Lista 3)

Neste tutorial de nossa Apostila C Progressivo, iremos mostrar as questões da apostila de C da UFMG sobre os Testes Condicionais IF ELSE e SWITCH, Laços ou loopings WHILE e FOR e do Operador Ternário em C: <condição> ? <operação 1> : <operação 2> ;

Apostila de C - Variáveis, Operadores, Operações Matemáticas e Lógicas (Lista 2)

Neste tutorial, iremos resolver a Lista 2 da Apostila de C da UFMG.
Mostraremos as questões e comentaremos cada um dos exercícios.

Apostila de C - Conceitos Básicos sobre a Linguagem C (Lista 1)

Neste tutorial de nosso curso, iremos mostrar os exercícios da Lista 1 da Apostila de C da UFMG, que trata os conceitos Básicos sobre programação em C.

Apostila de C completa - Resolução comentada da Apostila de C da UFMG

Quem já procurou por Apostila de C no Google certamente já se deparou com o famoso curso de C que era oferecido pela UFMG, cujo material é disponibilizado até hoje, e é uma referência em material para estudar a linguagem C.

A função malloc - Como alocar memória na linguagem C

No tutorial passado de nossa apostila de C, vimos a importância da alocação dinâmica da memória, técnica contrária a que vínhamos fazendo, que era declarando tudo estaticamente.

Vamos agora ensinar como usar a função malloc(), uma das três funções (malloc, calloc e realloc) que o C possui para tratar a alocação de memória, além de vermos, finalmente, na prática, uma grande utilidade dos ponteiros em C.

É uma importante lição que será extensivamente usada em nossas lições sobre listas encadeadas, filas e pilhas.

O que é e para que serve a Alocação Dinâmica de memória em C

No decorrer de nossa apostila de C, frisamos várias vezes que a linguagem C costuma agir em baixo nível, ou seja, bem próximo ao hardware, na arquitetura de seu sistema.

É por isso que temos que declarar, manualmente, as variáveis, lidar com endereços de memória (ponteiros), buffer, ter cuidado para não extrapolar os limites de vetor e outros detalhes e preocupações que a maioria das linguagens não exigem do programador.

Nessa introdução, vamos explicar outra coisa que o programador C deve ter consciência: alocar somente o necessário de memória.

Como declarar uma struct em C

Agora que explicamos no tutorial passado sobre o que são as structs, para que servem e onde usá-las, vamos explicar como usar ditas cujas estruturas.

Nesse tutorial de C vamos ensinar você a declarar, preencher os elementos da struct, acessar e trabalhar com os elementos de qualquer struct.

Structs em C: O que são, para que servem e onde são usadas

Agora que você estudou vetores e ponteiros, e aplicou esses conhecimentos nas strings em C, você viu a utilidade dos vetores, que é manusear várias variáveis de uma vez só.
Imagina a trabalheira de, ao invés de usar strings, usar variáveis do tipo char isoladamente?
Não dá nem pra pensar, não é?

Mas vetores têm uma limitação: eles possuem um tipo definido.
Ou o vetor é de char, ou de inteiros, ou de floats etc. Ou seja, vetores não podem ser usados com tipos diferentes.

Vamos ensinar agora as structs, que servem para manusear uma quantidade maior de informações de uma maneira mais simples, eficiente e de tipos diferentes.

Livro: Linguagem C - 10ª Edição 2007, Luís Damas

Qual o melhor livro de C, Que livro estudar C para iniciantes, Como começar a programar em CConfira agora um review detalhado sobre esse livro totalmente dedicado a linguagem C, feito pelo Luís Damas.


"Esta obra cobre, de forma didática, a totalidade da Linguagem C, desde os aspectos mais básicos até os aspectos mais avançados. Os assuntos são apresentados passo a passo com exemplos explicativos e com variações, de modo a tornarem-se acessíveis mesmo aos leitores sem qualquer experiência de programação."

Clique aqui para ter seu livro

Ele contém:
Mais de 7300 linhas de códigos explicados e comentados
240 programas completos
300 exercícios resolvidos
115 exercícios de exames universitários e concursos

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.


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.

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.