Compare Strings em C

Jinku Hu 12 outubro 2023
  1. Use a função strcmp para comparar strings
  2. Use a função strncmp para comparar apenas certas partes de strings
  3. Use as funções strcasecmp e strncasecmp para comparar strings, ignorando a caixa das letras
Compare Strings em C

Este artigo irá apresentar vários métodos sobre como comparar strings em C.

Use a função strcmp para comparar strings

A função strcmp é o recurso de biblioteca padrão definido no cabeçalho <string.h>. Strings de estilo C são apenas sequências de caracteres terminadas pelo símbolo \0, então a função teria que comparar cada caractere com a iteração.

strcmp recebe duas strings e retorna o inteiro para denotar o resultado da comparação. O número retornado é negativo se a primeira string for lexicograficamente menor que a segunda string, ou positivo se a última for menor que a anterior, ou 0 se as duas strings forem idênticas.

Observe que, no exemplo a seguir, invertemos o valor de retorno da função e o inserimos na instrução condicional ?: Para imprimir a saída correspondente no console.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";
  const char* str3 = "Hello there 2";

  !strcmp(str1, str2) ? printf("strings are equal\n")
                      : printf("strings are not equal\n");

  !strcmp(str1, str3) ? printf("strings are equal\n")
                      : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Resultado:

strings are not equal
strings are not equal

Use a função strncmp para comparar apenas certas partes de strings

strncmp é outra função útil definida no cabeçalho <string.h>, e pode ser utilizada para comparar apenas vários caracteres do início das strings.

strncmp recebe o terceiro argumento do tipo inteiro para especificar o número de caracteres a serem comparados em ambas as strings. Os valores de retorno da função são semelhantes aos retornados pelo strcmp.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";

  !strncmp(str1, str2, 5) ? printf("strings are equal\n")
                          : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Resultado:

strings are equal

Use as funções strcasecmp e strncasecmp para comparar strings, ignorando a caixa das letras

A função strcasecmp se comporta de maneira semelhante à função strcmp, exceto que ignora a caixa das letras. Esta função é compatível com POSIX e pode ser utilizada em vários sistemas operacionais junto com strncasecmp, que implementa a comparação sem distinção entre maiúsculas e minúsculas em um determinado número de caracteres em ambas as strings. O último parâmetro pode ser passado para a função com o terceiro argumento do tipo size_t.

Observe que os valores de retorno dessas funções podem ser usados diretamente em instruções condicionais.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  const char* str1 = "hello there 2";
  const char* str3 = "Hello there 2";

  !strcasecmp(str1, str3) ? printf("strings are equal\n")
                          : printf("strings are not equal\n");

  !strncasecmp(str1, str3, 5) ? printf("strings are equal\n")
                              : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Resultado:

strings are equal
strings are equal
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C String