0Pricing
C Academy · Aula

strcmp e comparação

Compare strings.

strcmp e comparação é uma aula grátis de C Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

Comparando strings

Você não pode comparar strings com == em C. Isso compara apenas os endereços de dois vetores, não o conteúdo deles.

Use strcmp(a, b) de <string.h> para comparar caractere por caractere.

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

int main(void) {
    char a[] = "apple";
    char b[] = "apple";
    if (strcmp(a, b) == 0)
        printf("Strings are equal\n");
    return 0;
}

O que strcmp retorna

strcmp retorna um int:

  • 0 se as strings forem iguais
  • um valor negativo se o primeiro char diferente em a for menor que em b
  • um valor positivo caso contrário
#include <stdio.h>
#include <string.h>

int main(void) {
    printf("%d\n", strcmp("abc", "abc"));
    printf("%d\n", strcmp("abc", "abd"));
    printf("%d\n", strcmp("abd", "abc"));
    return 0;
}

A armadilha do zero que significa igualdade

Um erro comum: escrever if (strcmp(a, b)) esperando que isso signifique igualdade.

Lembre-se de que strcmp retorna 0 (falso) quando são iguais; portanto, essa condição é verdadeira quando elas diferem. Sempre compare explicitamente com 0.

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

int main(void) {
    char input[] = "yes";
    if (strcmp(input, "yes") == 0)
        printf("Confirmed\n");
    else
        printf("Not confirmed\n");
    return 0;
}

Como a comparação funciona

strcmp compara os valores ASCII (bytes) dos caracteres, um de cada vez, até que eles sejam diferentes ou um terminador seja alcançado.

As letras maiúsculas (A=65) vêm antes das minúsculas (a=97), portanto "Zebra" é ordenada antes de "apple".

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

int main(void) {
    printf("%d\n", strcmp("Zebra", "apple"));
    return 0;
}

Ordenação lexicográfica

O sinal de strcmp permite ordenar strings alfabeticamente. Um resultado negativo significa que o primeiro argumento vem antes na ordem do dicionário.

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

int main(void) {
    const char *x = "banana";
    const char *y = "cherry";
    if (strcmp(x, y) < 0)
        printf("%s comes before %s\n", x, y);
    return 0;
}

strncmp: comparação limitada

strncmp(a, b, n) compara no máximo n caracteres. Isso é útil para verificar prefixos.

Por exemplo, para testar se uma string começa com "http".

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

int main(void) {
    char url[] = "https://site.com";
    if (strncmp(url, "https", 5) == 0)
        printf("Secure URL\n");
    return 0;
}

Comparação que ignora maiúsculas e minúsculas

A função padrão strcmp diferencia maiúsculas de minúsculas. Para ignorar essa diferença, você pode converter os caracteres com tolower de <ctype.h> durante a comparação.

(Sistemas POSIX também oferecem strcasecmp, mas ela não faz parte do padrão C.)

#include <stdio.h>
#include <ctype.h>

int ci_cmp(const char *a, const char *b) {
    while (*a && (tolower(*a) == tolower(*b))) { a++; b++; }
    return tolower(*a) - tolower(*b);
}

int main(void) {
    printf("%d\n", ci_cmp("Hello", "hello"));
    return 0;
}

Pesquisando com comparação

Você pode percorrer um vetor de strings e usar strcmp para encontrar uma correspondência, como em uma simples tabela de consulta.

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

int main(void) {
    const char *fruits[] = {"apple", "banana", "cherry"};
    const char *target = "banana";
    for (int i = 0; i < 3; i++) {
        if (strcmp(fruits[i], target) == 0) {
            printf("Found at index %d\n", i);
        }
    }
    return 0;
}

Ordenando strings

Usando strcmp como mecanismo, você pode ordenar vetores de strings. Veja uma pequena ordenação por bolha que troca ponteiros com base na ordem.

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

int main(void) {
    const char *names[] = {"Carol", "Alice", "Bob"};
    int n = 3;
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1 - i; j++)
            if (strcmp(names[j], names[j+1]) > 0) {
                const char *t = names[j];
                names[j] = names[j+1];
                names[j+1] = t;
            }
    for (int i = 0; i < n; i++) printf("%s\n", names[i]);
    return 0;
}

Não compare diretamente com subtração

Você pode tentar escrever sua própria comparação com a[i] - b[i], mas, com valores char brutos, o comportamento do sinal é definido pela implementação e pode causar estouro.

Prefira a biblioteca strcmp, que trata corretamente esses casos extremos.

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

int main(void) {
    int r = strcmp("file1", "file2");
    printf("Result sign: %s\n", r < 0 ? "negative" : "non-negative");
    return 0;
}

Comparando a entrada do usuário

Um uso comum é verificar uma senha ou uma opção de menu. Leia a entrada e, em seguida, compare-a com os valores esperados usando strcmp.

Sempre compare com 0 para testar a igualdade.

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

int main(void) {
    char choice[] = "quit";
    if (strcmp(choice, "quit") == 0)
        printf("Exiting program\n");
    return 0;
}

Verificação rápida

Teste sua compreensão dos valores retornados por strcmp.

Revisão

Você aprendeu a comparar strings em C:

  • strcmp retorna 0 para strings iguais e um valor negativo ou positivo para indicar a ordem.
  • Nunca use == com strings; ele compara endereços.
  • Sempre teste == 0 para verificar a igualdade (a armadilha de que zero é falso).
  • strncmp compara um prefixo; para ignorar maiúsculas e minúsculas, é necessário usar tolower.

Perguntas Frequentes

A aula “strcmp e comparação” é grátis?

Sim — o texto completo de “strcmp e comparação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “strcmp e comparação”?

Compare strings. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “strcmp e comparação”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. strlen, strcpy, strcat
  2. strcmp e comparação
  3. strtok e tokenização
  4. memcpy e memset
← Voltar para C Academy