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.
Die strcmp()-Funktion verstehen
In diesem Schritt werden Sie die strcmp()-Funktion in C kennenlernen, die verwendet wird, um zwei Zeichenketten lexikographisch zu vergleichen.
- Erstellen Sie eine neue Datei mit dem Namen
string-compare.cim Verzeichnis~/project:
cd ~/project
touch string-compare.c
- Ö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;
}
- 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.
- Erstellen Sie eine neue Datei mit dem Namen
string-compare-conditional.cim Verzeichnis~/project:
cd ~/project
touch string-compare-conditional.c
- Ö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;
}
- 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 vonif-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.
- Erstellen Sie eine neue Datei mit dem Namen
case-insensitive-compare.cim Verzeichnis~/project:
cd ~/project
touch case-insensitive-compare.c
- Ö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;
}
- Kompilieren Sie das Programm (Hinweis: Sie müssen möglicherweise die
-std=gnu99-Option verwenden):
gcc case-insensitive-compare.c -o case-insensitive-compare
- 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.
- Erstellen Sie eine neue Datei mit dem Namen
multiple-string-compare.cim Verzeichnis~/project:
cd ~/project
touch multiple-string-compare.c
- Ö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;
}
- Kompilieren Sie das Programm:
gcc multiple-string-compare.c -o multiple-string-compare
- 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.
- Erstellen Sie eine neue Datei mit dem Namen
password-manager.cim Verzeichnis~/project:
cd ~/project
touch password-manager.c
- Ö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;
}
- Kompilieren Sie das Programm:
gcc password-manager.c -o password-manager
- 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.



