Menu
Coddy logo textTech

Uso de strcmp()

Parte de la sección Logic & Flow del Journey de C de Coddy — lección 18 de 63.

Has aprendido a unir cadenas con strcat(), pero ¿qué pasa si necesitas determinar si dos cadenas contienen exactamente el mismo texto? En C, no puedes usar el operador de igualdad (==) para comparar cadenas porque solo compara direcciones de memoria, no el contenido real.

La función strcmp() de la biblioteca <string.h> resuelve este problema comparando dos cadenas carácter por carácter. Realiza lo que se denomina una comparación lexicográfica; esencialmente, compara cadenas en orden de diccionario.

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

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);  // Devuelve 0 (las cadenas son iguales)

La función strcmp() devuelve tres tipos diferentes de valores: devuelve 0 si las cadenas son idénticas, un valor negativo si la primera cadena va antes que la segunda alfabéticamente, y un valor positivo si la primera cadena va después de la segunda alfabéticamente.

Esta función es esencial para tomar decisiones basadas en el contenido de cadenas de texto, como validar la entrada del usuario, ordenar datos de texto o implementar la funcionalidad de búsqueda en sus programas.

challenge icon

Desafío

Fácil

Escribe un programa en C que implemente un sistema simple de verificación de contraseñas utilizando la función strcmp(). Tu programa debe:

  1. Leer un entero n que represente el número de intentos de inicio de sesión a procesar
  2. Para cada intento de inicio de sesión:
    • Leer un nombre de usuario de la entrada
    • Leer una contraseña de la entrada
    • Usar strcmp() para comparar el nombre de usuario con "admin"
    • Usar strcmp() para comparar la contraseña con "secret123"
    • Imprimir el mensaje apropiado basado en los resultados de la comparación
  3. Después de procesar todos los intentos, contar y mostrar cuántos inicios de sesión exitosos ocurrieron

La lógica de validación de inicio de sesión debe ser:

  • Si tanto el nombre de usuario como la contraseña son correctos: imprimir "Login successful"
  • Si el nombre de usuario es correcto pero la contraseña es incorrecta: imprimir "Invalid password"
  • Si el nombre de usuario es incorrecto pero la contraseña es correcta: imprimir "Invalid username"
  • Si tanto el nombre de usuario como la contraseña son incorrectos: imprimir "Invalid credentials"

Recuerda incluir la cabecera <string.h> para usar la función strcmp().

Tu salida debe mostrar los resultados en el siguiente formato:

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

Por ejemplo, si la entrada es:

4
admin
secret123
user
password
admin
wrong
guest
secret123

Tu salida debe ser:

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

Este desafío pone a prueba tu comprensión del uso de strcmp() para comparar la igualdad de cadenas, la implementación de lógica condicional basada en los resultados de la comparación de cadenas y el conteo de ocurrencias basado en los resultados de la comparación.

Hoja de referencia

La función strcmp() de <string.h> compara dos cadenas carácter por carácter utilizando una comparación lexicográfica:

#include <string.h>

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

strcmp() devuelve:

  • 0 si las cadenas son idénticas
  • Valor negativo si la primera cadena va antes que la segunda alfabéticamente
  • Valor positivo si la primera cadena va después que la segunda alfabéticamente

No se puede usar == para comparar cadenas en C, ya que solo compara direcciones de memoria, no el contenido.

Pruébalo tú mismo

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

int main() {
    int n;
    scanf("%d", &n);
    
    char username[100];
    char password[100];
    int successful_logins = 0;
    
    // TODO: Escribe tu código aquí
    // Procesa cada intento de inicio de sesión usando la función strcmp()
    // Compara el nombre de usuario con "admin" y la contraseña con "secret123"
    // Imprime los mensajes apropiados y cuenta los inicios de sesión exitosos
    
    printf("Total successful logins: %d\n", successful_logins);
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow