Crear funciones de comparación de cadenas en C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo crear e implementar funciones personalizadas de comparación de cadenas en C. El laboratorio cubre la comprensión de la función incorporada strcmp(), la implementación de la comparación de cadenas utilizando declaraciones condicionales, el manejo de comparaciones sin distinción entre mayúsculas y minúsculas, la realización de múltiples comparaciones de cadenas y la aplicación de la comparación de cadenas en un escenario del mundo real. Al final de este laboratorio, tendrás una sólida comprensión de las técnicas de manipulación y comparación de cadenas en la programación en C.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/CompoundTypesGroup -.-> c/strings("Strings") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-438244{{"Crear funciones de comparación de cadenas en C"}} c/strings -.-> lab-438244{{"Crear funciones de comparación de cadenas en C"}} c/function_declaration -.-> lab-438244{{"Crear funciones de comparación de cadenas en C"}} c/function_parameters -.-> lab-438244{{"Crear funciones de comparación de cadenas en C"}} c/user_input -.-> lab-438244{{"Crear funciones de comparación de cadenas en C"}} c/output -.-> lab-438244{{"Crear funciones de comparación de cadenas en C"}} end

Comprender la función strcmp()

En este paso, aprenderás sobre la función strcmp() en C, que se utiliza para comparar dos cadenas lexicográficamente.

  1. Crea un nuevo archivo llamado string-compare.c en el directorio ~/project:
cd ~/project
touch string-compare.c
  1. Abre el archivo en WebIDE y agrega el siguiente código:
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "hello";
    char str3[] = "world";

    // Compare strings using strcmp()
    int result1 = strcmp(str1, str2);
    int result2 = strcmp(str1, str3);

    printf("Comparison between str1 and str2: %d\n", result1);
    printf("Comparison between str1 and str3: %d\n", result2);

    return 0;
}
  1. Compila y ejecuta el programa:
gcc string-compare.c -o string-compare
./string-compare

Ejemplo de salida:

Comparison between str1 and str2: 0
Comparison between str1 and str3: -15

Analicemos cómo funciona strcmp():

  • Devuelve 0 si las cadenas son exactamente iguales.
  • Devuelve un valor negativo si la primera cadena es lexicográficamente menor que la segunda.
  • Devuelve un valor positivo si la primera cadena es lexicográficamente mayor que la segunda.

La función compara las cadenas carácter por carácter hasta encontrar una diferencia o llegar al final de una de las cadenas.

Implementar la comparación de cadenas con if-else

En este paso, aprenderás cómo usar strcmp() con declaraciones condicionales para tomar decisiones basadas en comparaciones de cadenas.

  1. Crea un nuevo archivo llamado string-compare-conditional.c en el directorio ~/project:
cd ~/project
touch string-compare-conditional.c
  1. Abre el archivo en WebIDE y agrega el siguiente código:
#include <stdio.h>
#include <string.h>

int main() {
    char username[50];
    char password[50];

    printf("Enter username: ");
    scanf("%s", username);

    printf("Enter password: ");
    scanf("%s", password);

    // Compare username and password using if-else
    if (strcmp(username, "admin") == 0) {
        if (strcmp(password, "secret") == 0) {
            printf("Login successful!\n");
        } else {
            printf("Incorrect password.\n");
        }
    } else {
        printf("Invalid username.\n");
    }

    return 0;
}
  1. Compila y ejecuta el programa:
gcc string-compare-conditional.c -o string-compare-conditional
./string-compare-conditional

Ejemplo de interacción:

Enter username: admin
Enter password: secret
Login successful!

Enter username: user
Enter password: wrongpass
Invalid username.

Puntos clave de este ejemplo:

  • strcmp() se utiliza dentro de declaraciones if para verificar la igualdad de cadenas.
  • La función devuelve 0 cuando las cadenas coinciden exactamente.
  • Las declaraciones if-else anidadas permiten una lógica de comparación de cadenas compleja.

Manejar la comparación sin distinción entre mayúsculas y minúsculas

En este paso, aprenderás cómo realizar comparaciones de cadenas sin distinción entre mayúsculas y minúsculas utilizando la función strcasecmp().

  1. Crea un nuevo archivo llamado case-insensitive-compare.c en el directorio ~/project:
cd ~/project
touch case-insensitive-compare.c
  1. Abre el archivo en WebIDE y agrega el siguiente código:
#include <stdio.h>
#include <string.h>

int main() {
    char input[50];

    printf("Enter a color (Red/red/GREEN/green): ");
    scanf("%s", input);

    // Case-insensitive comparison
    if (strcasecmp(input, "red") == 0) {
        printf("You entered the color RED.\n");
    } else if (strcasecmp(input, "green") == 0) {
        printf("You entered the color GREEN.\n");
    } else if (strcasecmp(input, "blue") == 0) {
        printf("You entered the color BLUE.\n");
    } else {
        printf("Unknown color.\n");
    }

    return 0;
}
  1. Compila el programa (nota: es posible que debas usar la bandera -std=gnu99):
gcc case-insensitive-compare.c -o case-insensitive-compare
  1. Ejecuta el programa:
./case-insensitive-compare

Ejemplos de interacción:

Enter a color (Red/red/GREEN/green): RED
You entered the color RED.

Enter a color (Red/red/GREEN/green): green
You entered the color GREEN.

Puntos clave sobre la comparación sin distinción entre mayúsculas y minúsculas:

  • strcasecmp() compara cadenas ignorando las diferencias entre mayúsculas y minúsculas.
  • Funciona de manera similar a strcmp(), pero es insensible a las mayúsculas y minúsculas.
  • Es útil para las entradas de usuario donde no importa la capitalización.

Realizar múltiples comparaciones de cadenas

En este paso, aprenderás cómo realizar múltiples comparaciones de cadenas utilizando diferentes técnicas de comparación.

  1. Crea un nuevo archivo llamado multiple-string-compare.c en el directorio ~/project:
cd ~/project
touch multiple-string-compare.c
  1. Abre el archivo en WebIDE y agrega el siguiente código:
#include <stdio.h>
#include <string.h>

int main() {
    char input[3][50];
    int comparison_count = 0;

    // Input three strings
    for (int i = 0; i < 3; i++) {
        printf("Enter string %d: ", i + 1);
        scanf("%s", input[i]);
    }

    // Compare first two strings
    if (strcmp(input[0], input[1]) == 0) {
        printf("First two strings are identical.\n");
        comparison_count++;
    }

    // Compare last two strings
    if (strcmp(input[1], input[2]) == 0) {
        printf("Last two strings are identical.\n");
        comparison_count++;
    }

    // Compare first and last strings
    if (strcmp(input[0], input[2]) == 0) {
        printf("First and last strings are identical.\n");
        comparison_count++;
    }

    // Overall comparison summary
    printf("Total matching string pairs: %d\n", comparison_count);

    return 0;
}
  1. Compila el programa:
gcc multiple-string-compare.c -o multiple-string-compare
  1. Ejecuta el programa:
./multiple-string-compare

Ejemplos de interacción:

Enter string 1: hello
Enter string 2: world
Enter string 3: hello
Total matching string pairs: 1

Puntos clave sobre múltiples comparaciones de cadenas:

  • Utiliza strcmp() para comparar diferentes combinaciones de cadenas.
  • Realiza un seguimiento del número de pares de cadenas coincidentes.
  • Demuestra una lógica flexible de comparación de cadenas.

Aplicar la comparación de cadenas en un escenario del mundo real

En este paso, crearás un sistema simple de gestión de contraseñas que demuestre técnicas prácticas de comparación de cadenas.

  1. Crea un nuevo archivo llamado password-manager.c en el directorio ~/project:
cd ~/project
touch password-manager.c
  1. Abre el archivo en WebIDE y agrega el siguiente código:
#include <stdio.h>
#include <string.h>

#define MAX_USERS 3
#define MAX_USERNAME 50
#define MAX_PASSWORD 50

// User structure to store credentials
struct User {
    char username[MAX_USERNAME];
    char password[MAX_PASSWORD];
    char role[20];
};

int main() {
    // Predefined user database
    struct User users[MAX_USERS] = {
        {"admin", "admin123", "administrator"},
        {"manager", "manager456", "manager"},
        {"user", "user789", "regular"}
    };

    char input_username[MAX_USERNAME];
    char input_password[MAX_PASSWORD];
    int login_success = 0;

    printf("=== Simple Password Management System ===\n");
    printf("Enter username: ");
    scanf("%s", input_username);

    printf("Enter password: ");
    scanf("%s", input_password);

    // Authenticate user with string comparison
    for (int i = 0; i < MAX_USERS; i++) {
        if (strcmp(users[i].username, input_username) == 0) {
            if (strcmp(users[i].password, input_password) == 0) {
                printf("Login Successful!\n");
                printf("Role: %s\n", users[i].role);
                login_success = 1;
                break;
            }
        }
    }

    if (!login_success) {
        printf("Login Failed. Invalid username or password.\n");
    }

    return 0;
}
  1. Compila el programa:
gcc password-manager.c -o password-manager
  1. Ejecuta el programa:
./password-manager

Ejemplos de interacción:

=== Simple Password Management System ===
Enter username: admin
Enter password: admin123
Login Successful!
Role: administrator

Enter username: user
Enter password: wrongpassword
Login Failed. Invalid username or password.

Puntos clave sobre este escenario del mundo real:

  • Utiliza strcmp() para la verificación segura de credenciales.
  • Demuestra la aplicación práctica de la comparación de cadenas.
  • Implementa un sistema simple de autenticación.
  • Muestra cómo comparar múltiples credenciales de usuario.

Resumen

En este laboratorio, aprendiste sobre la función strcmp() en C, que se utiliza para comparar dos cadenas lexicográficamente. Implementaste la comparación de cadenas utilizando strcmp() y declaraciones condicionales para tomar decisiones basadas en los resultados de la comparación. También aprendiste cómo manejar la comparación sin distinción entre mayúsculas y minúsculas y realizar múltiples comparaciones de cadenas. Finalmente, aplicaste la comparación de cadenas en un escenario del mundo real que involucra la autenticación de usuarios.

Los puntos clave de aprendizaje de este laboratorio incluyen comprender la función strcmp(), implementar la comparación de cadenas con declaraciones if-else, manejar la comparación sin distinción entre mayúsculas y minúsculas y aplicar la comparación de cadenas en una aplicación práctica.