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
afor menor que emb - 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
== 0para 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
- strlen, strcpy, strcat
- strcmp e comparação
- strtok e tokenização
- memcpy e memset