Zeichenkettenvergleichsfunktionen in C erstellen

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden Sie lernen, wie Sie benutzerdefinierte Zeichenkettenvergleichsfunktionen in C erstellen und implementieren. Das Lab behandelt das Verständnis der eingebauten strcmp()-Funktion, die Implementierung von Zeichenkettenvergleichen mit bedingten Anweisungen, die Behandlung von gross- und kleinschreibungsunabhängigen Vergleichen, die Durchführung mehrerer Zeichenkettenvergleiche und die Anwendung von Zeichenkettenvergleichen in einem realen Szenario. Am Ende dieses Labs werden Sie ein solides Verständnis von Zeichenkettenmanipulation und Vergleichstechniken in der C-Programmierung haben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) 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{{"Zeichenkettenvergleichsfunktionen in C erstellen"}} c/strings -.-> lab-438244{{"Zeichenkettenvergleichsfunktionen in C erstellen"}} c/function_declaration -.-> lab-438244{{"Zeichenkettenvergleichsfunktionen in C erstellen"}} c/function_parameters -.-> lab-438244{{"Zeichenkettenvergleichsfunktionen in C erstellen"}} c/user_input -.-> lab-438244{{"Zeichenkettenvergleichsfunktionen in C erstellen"}} c/output -.-> lab-438244{{"Zeichenkettenvergleichsfunktionen in C erstellen"}} end

Die strcmp()-Funktion verstehen

In diesem Schritt werden Sie die strcmp()-Funktion in C kennenlernen, die verwendet wird, um zwei Zeichenketten lexikographisch zu vergleichen.

  1. Erstellen Sie eine neue Datei mit dem Namen string-compare.c im Verzeichnis ~/project:
cd ~/project
touch string-compare.c
  1. Öffnen Sie die Datei in der WebIDE und fügen Sie den folgenden Code hinzu:
#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. Kompilieren und führen Sie das Programm aus:
gcc string-compare.c -o string-compare
./string-compare

Beispielausgabe:

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

Lassen Sie uns analysieren, wie strcmp() funktioniert:

  • Sie gibt 0 zurück, wenn die Zeichenketten genau gleich sind.
  • Sie gibt einen negativen Wert zurück, wenn die erste Zeichenkette lexikographisch kleiner als die zweite ist.
  • Sie gibt einen positiven Wert zurück, wenn die erste Zeichenkette lexikographisch grösser als die zweite ist.

Die Funktion vergleicht die Zeichenketten Zeichen für Zeichen, bis sie einen Unterschied findet oder das Ende einer der Zeichenketten erreicht.

Zeichenkettenvergleich mit if-else implementieren

In diesem Schritt werden Sie lernen, wie Sie strcmp() mit bedingten Anweisungen verwenden, um Entscheidungen auf der Grundlage von Zeichenkettenvergleichen zu treffen.

  1. Erstellen Sie eine neue Datei mit dem Namen string-compare-conditional.c im Verzeichnis ~/project:
cd ~/project
touch string-compare-conditional.c
  1. Öffnen Sie die Datei in der WebIDE und fügen Sie den folgenden Code hinzu:
#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. Kompilieren und führen Sie das Programm aus:
gcc string-compare-conditional.c -o string-compare-conditional
./string-compare-conditional

Beispielinteraktion:

Enter username: admin
Enter password: secret
Login successful!

Enter username: user
Enter password: wrongpass
Invalid username.

Wichtige Punkte zu diesem Beispiel:

  • strcmp() wird innerhalb von if-Anweisungen verwendet, um die Gleichheit von Zeichenketten zu überprüfen.
  • Die Funktion gibt 0 zurück, wenn die Zeichenketten genau übereinstimmen.
  • Verschachtelte if-else-Anweisungen ermöglichen komplexe Zeichenkettenvergleichslogik.

Gross- und kleinschreibungsunabhängigen Vergleich behandeln

In diesem Schritt werden Sie lernen, wie Sie gross- und kleinschreibungsunabhängige Zeichenkettenvergleiche mit der strcasecmp()-Funktion durchführen.

  1. Erstellen Sie eine neue Datei mit dem Namen case-insensitive-compare.c im Verzeichnis ~/project:
cd ~/project
touch case-insensitive-compare.c
  1. Öffnen Sie die Datei in der WebIDE und fügen Sie den folgenden Code hinzu:
#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. Kompilieren Sie das Programm (Hinweis: Sie müssen möglicherweise die -std=gnu99-Option verwenden):
gcc case-insensitive-compare.c -o case-insensitive-compare
  1. Führen Sie das Programm aus:
./case-insensitive-compare

Beispielinteraktionen:

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.

Wichtige Punkte zum gross- und kleinschreibungsunabhängigen Vergleich:

  • strcasecmp() vergleicht Zeichenketten, wobei Gross- und Kleinschreibung ignoriert wird.
  • Sie funktioniert ähnlich wie strcmp(), ist jedoch gross- und kleinschreibungsunabhängig.
  • Nützlich für Benutzereingaben, bei denen die Gross- und Kleinschreibung keine Rolle spielt.

Mehrere Zeichenkettenvergleiche durchführen

In diesem Schritt werden Sie lernen, wie Sie mehrere Zeichenkettenvergleiche mit verschiedenen Vergleichstechniken durchführen.

  1. Erstellen Sie eine neue Datei mit dem Namen multiple-string-compare.c im Verzeichnis ~/project:
cd ~/project
touch multiple-string-compare.c
  1. Öffnen Sie die Datei in der WebIDE und fügen Sie den folgenden Code hinzu:
#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. Kompilieren Sie das Programm:
gcc multiple-string-compare.c -o multiple-string-compare
  1. Führen Sie das Programm aus:
./multiple-string-compare

Beispielinteraktionen:

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

Wichtige Punkte zu mehreren Zeichenkettenvergleichen:

  • Verwenden Sie strcmp(), um verschiedene Zeichenkettenkombinationen zu vergleichen.
  • Zählen Sie die Anzahl der übereinstimmenden Zeichenkettenpaare.
  • Demonstrieren Sie flexible Zeichenkettenvergleichslogik.

Zeichenkettenvergleich in einem realen Szenario anwenden

In diesem Schritt werden Sie ein einfaches Passwortverwaltungssystem erstellen, das praktische Zeichenkettenvergleichstechniken demonstriert.

  1. Erstellen Sie eine neue Datei mit dem Namen password-manager.c im Verzeichnis ~/project:
cd ~/project
touch password-manager.c
  1. Öffnen Sie die Datei in der WebIDE und fügen Sie den folgenden Code hinzu:
#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. Kompilieren Sie das Programm:
gcc password-manager.c -o password-manager
  1. Führen Sie das Programm aus:
./password-manager

Beispielinteraktionen:

=== 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.

Wichtige Punkte zu diesem realen Szenario:

  • Verwendet strcmp() für eine sichere Prüfung von Anmeldeinformationen.
  • Demonstriert die praktische Anwendung des Zeichenkettenvergleichs.
  • Implementiert ein einfaches Authentifizierungssystem.
  • Zeigt, wie mehrere Benutzeranmeldeinformationen verglichen werden können.

Zusammenfassung

In diesem Lab haben Sie über die strcmp()-Funktion in C gelernt, die verwendet wird, um zwei Zeichenketten lexikographisch zu vergleichen. Sie haben Zeichenkettenvergleiche mit strcmp() und bedingten Anweisungen implementiert, um Entscheidungen auf der Grundlage der Vergleichsergebnisse zu treffen. Sie haben auch gelernt, wie Sie gross- und kleinschreibungsunabhängige Vergleiche behandeln und mehrere Zeichenkettenvergleiche durchführen. Schließlich haben Sie den Zeichenkettenvergleich in einem realen Szenario angewendet, das die Benutzerauthentifizierung betrifft.

Die wichtigsten Lernpunkte aus diesem Lab umfassen das Verständnis der strcmp()-Funktion, die Implementierung von Zeichenkettenvergleichen mit if-else-Anweisungen, die Behandlung von gross- und kleinschreibungsunabhängigen Vergleichen und die Anwendung von Zeichenkettenvergleichen in einer praktischen Anwendung.