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.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das ein einfaches Passwort-Verifizierungssystem unter Verwendung der Funktion strcmp() implementiert. Ihr Programm sollte:
- Einen Ganzzahlwert
neinlesen, der die Anzahl der zu verarbeitenden Login-Versuche darstellt - 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 vergleichenstrcmp()verwenden, um das Passwort mit "secret123" zu vergleichen- Die entsprechende Nachricht basierend auf den Vergleichsergebnissen ausgeben
- 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
secret123Sollte Ihre Ausgabe wie folgt aussehen:
Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1Diese 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;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-Funktionen