Menu
Coddy logo textTech

Verwendung von strcmp()

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 18 von 63.

Sie haben gelernt, wie man Zeichenketten mit strcat() verbindet, aber was ist, wenn Sie feststellen müssen, ob zwei Zeichenketten genau denselben Text enthalten? In C können Sie den Gleichheitsoperator (==) nicht verwenden, um Zeichenketten zu vergleichen, da er nur Speicheradressen vergleicht, nicht den tatsächlichen Inhalt.

Die Funktion strcmp() aus der Bibliothek <string.h> löst dieses Problem, indem sie zwei Zeichenketten Zeichen für Zeichen vergleicht. Sie führt einen sogenannten lexikographischen Vergleich durch – im Wesentlichen werden Zeichenketten in alphabetischer Reihenfolge verglichen.

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

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);  // Gibt 0 zurück (Strings sind gleich)

Die Funktion strcmp() gibt drei verschiedene Arten von Werten zurück: sie gibt 0 zurück, wenn die Zeichenfolgen identisch sind, einen negativen Wert, wenn die erste Zeichenfolge alphabetisch vor der zweiten steht, und einen positiven Wert, wenn die erste Zeichenfolge alphabetisch nach der zweiten steht.

Diese Funktion ist essenziell für Entscheidungen auf der Grundlage von String-Inhalten, wie z. B. die Validierung von Benutzereingaben, das Sortieren von Textdaten oder die Implementierung von Suchfunktionen in Ihren Programmen.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das ein einfaches Passwort-Verifizierungssystem unter Verwendung der Funktion strcmp() implementiert. Ihr Programm sollte:

  1. Einen Ganzzahlwert n einlesen, der die Anzahl der zu verarbeitenden Login-Versuche darstellt
  2. Für jeden Login-Versuch:
    • Einen Benutzernamen von der Eingabe einlesen
    • Ein Passwort von der Eingabe einlesen
    • strcmp() verwenden, um den Benutzernamen mit "admin" zu vergleichen
    • strcmp() verwenden, um das Passwort mit "secret123" zu vergleichen
    • Die entsprechende Nachricht basierend auf den Vergleichsergebnissen ausgeben
  3. Nach der Verarbeitung aller Versuche die Anzahl der erfolgreichen Logins zählen und anzeigen

Die Logik für die Login-Validierung sollte wie folgt aussehen:

  • Wenn sowohl Benutzername als auch Passwort korrekt sind: geben Sie "Login successful" aus
  • Wenn der Benutzername korrekt ist, aber das Passwort falsch: geben Sie "Invalid password" aus
  • Wenn der Benutzername falsch ist, aber das Passwort korrekt: geben Sie "Invalid username" aus
  • Wenn sowohl Benutzername als auch Passwort falsch sind: geben Sie "Invalid credentials" aus

Denken Sie daran, den Header <string.h> einzubinden, um die Funktion strcmp() zu verwenden.

Ihre Ausgabe sollte die Ergebnisse im folgenden Format anzeigen:

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

Wenn die Eingabe zum Beispiel wie folgt aussieht:

4
admin
secret123
user
password
admin
wrong
guest
secret123

Sollte Ihre Ausgabe wie folgt aussehen:

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

Diese Herausforderung testet Ihr Verständnis für die Verwendung von strcmp() zum Vergleichen von Strings auf Gleichheit, die Implementierung von bedingter Logik basierend auf String-Vergleichsergebnissen und das Zählen von Vorkommnissen basierend auf Vergleichsergebnissen.

Spickzettel

Die Funktion strcmp() aus <string.h> vergleicht zwei Zeichenketten Zeichen für Zeichen mittels lexikographischem Vergleich:

#include <string.h>

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

strcmp() gibt Folgendes zurück:

  • 0, wenn die Zeichenketten identisch sind
  • Einen negativen Wert, wenn die erste Zeichenkette alphabetisch vor der zweiten steht
  • Einen positiven Wert, wenn die erste Zeichenkette alphabetisch nach der zweiten steht

In C kann == nicht zum Vergleichen von Zeichenketten verwendet werden, da es nur Speicheradressen vergleicht, nicht den Inhalt.

Probier es selbst

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

int main() {
    int n;
    scanf("%d", &n);
    
    char username[100];
    char password[100];
    int successful_logins = 0;
    
    // TODO: Schreiben Sie hier Ihren Code
    // Verarbeiten Sie jeden Anmeldeversuch mit der Funktion strcmp()
    // Vergleichen Sie den Benutzernamen mit "admin" und das Passwort mit "secret123"
    // Geben Sie entsprechende Meldungen aus und zählen Sie erfolgreiche Anmeldungen
    
    printf("Total successful logins: %d\n", successful_logins);
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow