Verwendung von strcmp()
Teil des Abschnitts Logik & Ablauf 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
EinfachSchreibe ein C-Programm, das mithilfe der Funktion strcmp() ein einfaches Passwortverifizierungssystem implementiert. Dein Programm soll:
- Eine Ganzzahl
neinlesen, die die Anzahl der zu verarbeitenden Anmeldeversuche angibt - Für jeden Anmeldeversuch:
- Einen Benutzernamen aus der Eingabe einlesen
- Ein Passwort aus der Eingabe einlesen
strcmp()verwenden, um den Benutzernamen mit "admin" zu vergleichenstrcmp()verwenden, um das Passwort mit "secret123" zu vergleichen- Abhängig von den Vergleichsergebnissen die entsprechende Meldung ausgeben
- Nach der Verarbeitung aller Versuche zählen und anzeigen, wie viele erfolgreiche Anmeldungen erfolgt sind
Die Logik zur Anmeldevalidierung soll folgendermaßen aussehen:
- Wenn sowohl Benutzername als auch Passwort korrekt sind: „Anmeldung erfolgreich“ ausgeben
- Wenn der Benutzername korrekt, aber das Passwort falsch ist: „Ungültiges Passwort“ ausgeben
- Wenn der Benutzername falsch, aber das Passwort korrekt ist: „Ungültiger Benutzername“ ausgeben
- Wenn sowohl Benutzername als auch Passwort falsch sind: „Ungültige Anmeldedaten“ ausgeben
Denke daran, den Header <string.h> einzubinden, um die Funktion strcmp() verwenden zu können.
Deine Ausgabe soll die Ergebnisse im folgenden Format anzeigen:
[Login result message]
[Login result message]
...
Total successful logins: [count]Wenn die Eingabe beispielsweise folgendermaßen lautet:
4
admin
secret123
user
password
admin
wrong
guest
secret123Deine Ausgabe soll folgendermaßen aussehen:
Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1Diese Aufgabe testet dein Verständnis der Verwendung von strcmp() zum Vergleichen von Zeichenketten auf Gleichheit, der Implementierung bedingter Logik auf Grundlage von Zeichenkettenvergleichsergebnissen und des Zählens von Vorkommen anhand der Vergleichsergebnisse.
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 Logik & Ablauf
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Übe selbstständig: Online-C-Compiler