Compare Strings em C

  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

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<string.h>
#include<stdlib.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<string.h>
#include<stdlib.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<string.h>
#include<stdlib.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

Artigo relacionado - C String

  • Obter Substring em C
  • Obter um Substring em C