Введение
В этом практическом занятии (лабораторной работе) вы научитесь создавать и реализовывать пользовательские функции сравнения строк на языке C. В рамках практического занятия рассматриваются следующие аспекты: понимание встроенной функции strcmp(), реализация сравнения строк с использованием условных операторов, обработка нечувствительного к регистру сравнения, выполнение множественных сравнений строк и применение сравнения строк в реальной ситуации. По завершении этого практического занятия вы будете хорошо понимать техники манипулирования и сравнения строк в программировании на языке C.
Понимание функции strcmp()
В этом шаге вы узнаете о функции strcmp() в языке C, которая используется для лексикографического сравнения двух строк.
- Создайте новый файл с именем
string-compare.cв директории~/project:
cd ~/project
touch string-compare.c
- Откройте файл в WebIDE и добавьте следующий код:
#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;
}
- Скомпилируйте и запустите программу:
gcc string-compare.c -o string-compare
./string-compare
Пример вывода:
Comparison between str1 and str2: 0
Comparison between str1 and str3: -15
Разберём, как работает функция strcmp():
- Она возвращает 0, если строки полностью совпадают.
- Она возвращает отрицательное значение, если первая строка лексикографически меньше второй.
- Она возвращает положительное значение, если первая строка лексикографически больше второй.
Функция сравнивает строки посимвольно, пока не найдёт различие или не дойдёт до конца одной из строк.
Реализация сравнения строк с использованием if-else
В этом шаге вы научитесь использовать функцию strcmp() вместе с условными операторами для принятия решений на основе сравнения строк.
- Создайте новый файл с именем
string-compare-conditional.cв директории~/project:
cd ~/project
touch string-compare-conditional.c
- Откройте файл в WebIDE и добавьте следующий код:
#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;
}
- Скомпилируйте и запустите программу:
gcc string-compare-conditional.c -o string-compare-conditional
./string-compare-conditional
Пример взаимодействия:
Enter username: admin
Enter password: secret
Login successful!
Enter username: user
Enter password: wrongpass
Invalid username.
Основные моменты этого примера:
- Функция
strcmp()используется внутри операторовifдля проверки равенства строк. - Функция возвращает 0, когда строки полностью совпадают.
- Вложенные операторы
if-elseпозволяют реализовать сложную логику сравнения строк.
Обработка нечувствительного к регистру сравнения
В этом шаге вы научитесь выполнять нечувствительное к регистру сравнение строк с использованием функции strcasecmp().
- Создайте новый файл с именем
case-insensitive-compare.cв директории~/project:
cd ~/project
touch case-insensitive-compare.c
- Откройте файл в WebIDE и добавьте следующий код:
#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;
}
- Скомпилируйте программу (замечание: вам может потребоваться использовать флаг
-std=gnu99):
gcc case-insensitive-compare.c -o case-insensitive-compare
- Запустите программу:
./case-insensitive-compare
Примеры взаимодействия:
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.
Основные моменты нечувствительного к регистру сравнения:
- Функция
strcasecmp()сравнивает строки, игнорируя различия в регистре букв. - Она работает аналогично функции
strcmp(), но нечувствительна к регистру. - Полезна для обработки пользовательского ввода, когда регистр букв не имеет значения.
Выполнение множественных сравнений строк
В этом шаге вы научитесь выполнять множественные сравнения строк с использованием различных техник сравнения.
- Создайте новый файл с именем
multiple-string-compare.cв директории~/project:
cd ~/project
touch multiple-string-compare.c
- Откройте файл в WebIDE и добавьте следующий код:
#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;
}
- Скомпилируйте программу:
gcc multiple-string-compare.c -o multiple-string-compare
- Запустите программу:
./multiple-string-compare
Примеры взаимодействия:
Enter string 1: hello
Enter string 2: world
Enter string 3: hello
Total matching string pairs: 1
Основные моменты множественных сравнений строк:
- Используйте функцию
strcmp()для сравнения различных комбинаций строк. - Отслеживайте количество совпадающих пар строк.
- Демонстрируйте гибкую логику сравнения строк.
Применение сравнения строк в реальной ситуации
В этом шаге вы создадите простую систему управления паролями, которая демонстрирует практические техники сравнения строк.
- Создайте новый файл с именем
password-manager.cв директории~/project:
cd ~/project
touch password-manager.c
- Откройте файл в WebIDE и добавьте следующий код:
#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;
}
- Скомпилируйте программу:
gcc password-manager.c -o password-manager
- Запустите программу:
./password-manager
Примеры взаимодействия:
=== 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.
Основные моменты этой реальной ситуации:
- Использует функцию
strcmp()для безопасной проверки учетных данных. - Демонстрирует практическое применение сравнения строк.
- Реализует простую систему аутентификации.
- Показывает, как сравнивать учетные данные нескольких пользователей.
Резюме
В этом практическом занятии (лабораторной работе) вы узнали о функции strcmp() в языке C, которая используется для лексикографического сравнения двух строк. Вы реализовали сравнение строк с использованием функции strcmp() и условных операторов для принятия решений на основе результатов сравнения. Вы также научились обрабатывать нечувствительное к регистру сравнение и выполнять множественные сравнения строк. Наконец, вы применили сравнение строк в реальной ситуации, связанной с аутентификацией пользователей.
Основные моменты обучения из этого практического занятия включают понимание функции strcmp(), реализацию сравнения строк с использованием операторов if-else, обработку нечувствительного к регистру сравнения и применение сравнения строк в практическом приложении.



