Como Comparar Strings com a Função Strcmp em C?
Nós vamos aprender como comparar strings com a função strcmp, abreviação de comparação.
Da mesma forma como a gente compara números, por exemplo, querendo saber se dez igua é a dez, a gente também pode comparar strings, querendo saber se uma string igual a outra, se é menor ou maior.
E aí o que significa dizer que uma string é menor ou maior que outra?
Que ela ocorre primeiro do que a outra no nosso alfabeto da língua portuguesa.
Vamos aprender nessa aula como comparar strings e você vai ver que é bastante simples.
Nós temos a função strcmp, str abreviação de string, e cmp, abreviação de comparação do termo em inglês (compare).
Essa função ela recebe duas strings, que são as strings que a gente quer comparar, e ela retorna um número inteiro, que pode ser negativo, zero ou positivo; e aí vamos entender o que significa esses resultados, negativo zero, ou positivo.
A utilização da nossa função pode ser dessa forma aqui, novamente você pode utilizar a função dentro de um printf, e aí você vai imprimir um número inteiro que vai ser negativo (zero) ou positivo; ou você pode, perceba, que eu tenho aqui o sinal de atribuição, você pode atribuir o retorno da função à uma variável do tipo inteiro.
Nesse caso estou fazendo isso aqui, a variável resultado, e aí eu estou passando aqui string s1 e e strings 2.
A princípio, não importa quais sejam as strings, eu quero compará-las e descobrir se elas são iguais, ou qual ocorre primeiro no alfabeto.
Então o resultado que a gente vai ter aqui vai ser um número inteiro e esse número inteiro pode ser negativo, zero ou positivo.
O que isso significa?
Algo muito simples, olha só, se o retorno da função for o número zero, significa que s1 é exatamente a mesma que s2, ou seja, elas são iguais.
Se for menos um, significa que s1 é menor que s2, e aí para string, o que significa dizer que
s1 é menor do que s2?
Significa que s1 ocorre antes do que s2; é como se s1 começasse, por exemplo, com a e s2 cmeçasse com b.
Então, no dicionário, na língua portuguesa, s1 sempre vai aparecer primeiro.
E se o resultado for um positivo, significa que s1 é maior do que s2, ou seja, s1 ocorre depois de s2; então essa é a interpretação desses resultados.
Perceba que eu não consigo fazer a comparação de strings dessa forma aqui, para números isso aqui funciona, porque para número eu tenho basicamente dois números, então dez é igual a nove?
O resultado vai ser falso; só que para string isso aqui não funciona, por quê?
Porque uma string é um vetor de caracteres, então eu tenho aqui um vetor com vários caracteres, eu tenho aqui outro vetor com vários caracteres, eu não consigo comparar eles utilizando operador de comparação, porque isso aqui só funcionaria para caracteres; então se eu tiver o caractere a, aí eu posso usar dois sinais de igual para comparar se é igual, por exemplo, a este caractere, essa comparação vai funcionar porque isso aqui um caractere e isso aqui é um caractere; aqui eu tenho vários, eu tenho um conjunto de caracteres e aqui também.
então, basicamente, o que é que a função cmp faz, ela pega o primeiro caractere daqui e olha, é igual o primeiro caractere aqui?
Se for, continua, o segundo caractere daqui é igual o segundo carácter daqui?
Sim, é, continua; até chegar no fim.
Chegou no fim, o último caractere é igual ao último caractere?
Sim, retorna zero significa que elas são iguais.
A hora que encontrar um diferente, ela vai ver quem ocorre primeiro no alfabeto, “Ah, esse aqui ocorre primeiro”, então ela vai retornar menos um para indicar que s1 ocorre primeiro que s2.
Nunca confunda, não erre isso aqui, números você pode usar dois sinais de igual, caractere você pode usar dois sinais de igual, strings você não pode usar dois sinais de igual, não vai funcionar, porque uma string é um vetor, é um conjunto.
Vamos ver esse exemplo funcionando no Code Blocks?
Vem comigo!
Eu estou aqui no Code Blocks.
temos aqui a nossa função main, novamente eu já fiz o include aqui no nosso arquivo de cabeçalho string.h, e aqui dentro eu tenho duas string, s1 com tamanho cinquenta, com o conteúdo ABCD; s2 com tamanho cinquenta, conteúdo ABCD perceba que elas são exatamente iguais, criei aqui uma variável inteira chamada resultado, e aí na linha dez, perceba, é aqui que está o ponto central dessa aula, a nossa variável inteira resultado recebe, perceba, tem o sinal de atribuição aqui, o retorno da nossa função strcmp e aí eu estou passando string s1 e a string s2.
Aqui eu estou imprimindo o resultado, eu estou saltando uma linha, colocando uma tabulação, imprimindo o texto, resultado, e um número inteiro, que vai vir da nossa variável resultado.
Vamos ver o resultado para essas strings aqui?
Eu vou compilar e executar o meu programa, e aí, olha só, nós temos aqui resultado zero, por que zero?
O zero indica que as duas strings são exatamente iguais.
Agora, olha só o que vai acontecer se eu colocar aqui, por exemplo, abacaxi - e aí, você gosta de abacaxi?
e abacate?
- Você gosta de abacate?
O que vai acontecer se eu comparar essas duas strings, vamos ver?
Eu vou compilar e executar aqui o meu programa; resultado um.
Por que deu resultado um?
Vamos avaliar as nossas strings, olha só, primeiro caractere, a e a, é igual; segundo, b e b, é igual; terceiro, a e a, é igual; quarto, c e c, também é igual; quinto a e a; também é igual; sexto, x e t, opa!
são diferentes.
Ok, são diferentes, a gente já descobriu que ela não é igual, quem ocorre primeiro no alfabeto?
O t, certo?!?
P, q, r, s, t, u, v, w, x; então o t ocorre primeiro, que é a string dois, então o retorno, dizendo que abacate no dicionário, ocorre primeiro do que abacaxi, ou na programação, a gente diz que abacate é menor do que abacaxi.
E se eu inverter?
Eu vou colocar, eu vou recortar abacaxi daqui, ctrl x, vou colocar ele aqui, e agora vou pegar abacate, vou colocar aqui na linha de cima e o abacaxi na linha de baixo.
Se antes o resultado foi um, eu inverti, então abacate ocorre em primeiro do que abacaxi; então agora o resultado tem que ser menos um.
Vamos ver se é isso mesm?
Vou compilar e executar, temos aqui menos um, porque abacate é menor do que abacaxi, ou abacate ocorre primeiro do que abacaxi.