Menu
Coddy logo textTech

Usando strcmp()

Parte da seção Logic & Flow do Journey de C da Coddy — lição 18 de 63.

Você aprendeu como juntar strings com strcat(), mas e se você precisar determinar se duas strings contêm exatamente o mesmo texto? Em C, você não pode usar o operador de igualdade (==) para comparar strings porque ele apenas compara endereços de memória, não o conteúdo real.

A função strcmp() da biblioteca <string.h> resolve esse problema comparando duas strings caractere por caractere. Ela realiza o que é chamado de comparação lexicográfica - essencialmente comparando strings em ordem de dicionário.

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

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);  // Retorna 0 (as strings são iguais)

A função strcmp() retorna três tipos diferentes de valores: ela retorna 0 se as strings forem idênticas, um valor negativo se a primeira string vier antes da segunda em ordem alfabética, e um valor positivo se a primeira string vier depois da segunda em ordem alfabética.

Esta função é essencial para tomar decisões com base no conteúdo de strings, como validar a entrada do usuário, ordenar dados de texto ou implementar a funcionalidade de busca em seus programas.

challenge icon

Desafio

Fácil

Escreva um programa em C que implemente um sistema simples de verificação de senha usando a função strcmp(). Seu programa deve:

  1. Ler um número inteiro n representando o número de tentativas de login a serem processadas
  2. Para cada tentativa de login:
    • Ler um nome de usuário da entrada
    • Ler uma senha da entrada
    • Usar strcmp() para comparar o nome de usuário com "admin"
    • Usar strcmp() para comparar a senha com "secret123"
    • Imprimir a mensagem apropriada com base nos resultados da comparação
  3. Após processar todas as tentativas, contar e exibir quantos logins bem-sucedidos ocorreram

A lógica de validação de login deve ser:

  • Se tanto o nome de usuário quanto a senha estiverem corretos: imprimir "Login successful"
  • Se o nome de usuário estiver correto, mas a senha estiver errada: imprimir "Invalid password"
  • Se o nome de usuário estiver errado, mas a senha estiver correta: imprimir "Invalid username"
  • Se tanto o nome de usuário quanto a senha estiverem errados: imprimir "Invalid credentials"

Lembre-se de incluir o cabeçalho <string.h> para usar a função strcmp().

Sua saída deve exibir os resultados no seguinte formato:

[Login result message]
[Login result message]
...
Total successful logins: [count]

Por exemplo, se a entrada for:

4
admin
secret123
user
password
admin
wrong
guest
secret123

Sua saída deve ser:

Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1

Este desafio testa sua compreensão do uso de strcmp() para comparar strings quanto à igualdade, implementando lógica condicional baseada em resultados de comparação de strings e contando ocorrências com base nos resultados da comparação.

Folha de consulta

A função strcmp() de <string.h> compara duas strings caractere por caractere usando comparação lexicográfica:

#include <string.h>

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);

strcmp() retorna:

  • 0 se as strings forem idênticas
  • Valor negativo se a primeira string vier antes da segunda em ordem alfabética
  • Valor positivo se a primeira string vier depois da segunda em ordem alfabética

Não é possível usar == para comparar strings em C, pois ele compara apenas endereços de memória, não o conteúdo.

Experimente você mesmo

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

int main() {
    int n;
    scanf("%d", &n);
    
    char username[100];
    char password[100];
    int successful_logins = 0;
    
    // TODO: Escreva seu código aqui
    // Processe cada tentativa de login usando a função strcmp()
    // Compare o nome de usuário com "admin" e a senha com "secret123"
    // Imprima as mensagens apropriadas e conte os logins bem-sucedidos
    
    printf("Total successful logins: %d\n", successful_logins);
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow