Menu
CoddyTech

Dùng strcmp()

Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 18 trên 63.

Bạn đã học cách nối các chuỗi bằng strcat(), nhưng nếu cần xác định hai chuỗi có chứa chính xác cùng một văn bản thì sao? Trong C, bạn không thể dùng toán tử bằng (==) để so sánh chuỗi vì toán tử này chỉ so sánh địa chỉ bộ nhớ, chứ không so sánh nội dung thực tế.

Hàm strcmp() từ thư viện <string.h> giải quyết vấn đề này bằng cách so sánh hai chuỗi từng ký tự một. Hàm này thực hiện thao tác gọi là so sánh theo thứ tự từ điển, về cơ bản là so sánh các chuỗi theo thứ tự trong từ điển.

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

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);  // Trả về 0 (các chuỗi bằng nhau)

Hàm (function) strcmp() trả về ba loại giá trị khác nhau: hàm trả về 0 nếu hai chuỗi giống hệt nhau, một giá trị âm nếu chuỗi thứ nhất đứng trước chuỗi thứ hai theo thứ tự bảng chữ cái, và một giá trị dương nếu chuỗi thứ nhất đứng sau chuỗi thứ hai theo thứ tự bảng chữ cái.

Hàm này rất cần thiết để đưa ra quyết định dựa trên nội dung chuỗi, chẳng hạn như xác thực đầu vào của người dùng, sắp xếp dữ liệu văn bản hoặc triển khai chức năng tìm kiếm trong chương trình của bạn.

challenge icon

Thử thách

Dễ

Viết chương trình C triển khai hệ thống xác minh mật khẩu đơn giản bằng hàm strcmp(). Chương trình cần:

  1. Đọc một số nguyên n biểu thị số lần đăng nhập cần xử lý
  2. Với mỗi lần đăng nhập:
    • Đọc tên người dùng từ đầu vào
    • Đọc mật khẩu từ đầu vào
    • Dùng strcmp() để so sánh tên người dùng với "admin"
    • Dùng strcmp() để so sánh mật khẩu với "secret123"
    • In thông báo phù hợp dựa trên kết quả so sánh
  3. Sau khi xử lý tất cả các lần thử, đếm và hiển thị số lần đăng nhập thành công

Logic xác thực đăng nhập như sau:

  • Nếu cả tên người dùng và mật khẩu đều đúng: in "Login successful"
  • Nếu tên người dùng đúng nhưng mật khẩu sai: in "Invalid password"
  • Nếu tên người dùng sai nhưng mật khẩu đúng: in "Invalid username"
  • Nếu cả tên người dùng và mật khẩu đều sai: in "Invalid credentials"

Nhớ thêm tiêu đề <string.h> để sử dụng hàm strcmp().

Đầu ra cần hiển thị kết quả theo định dạng sau:

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

Ví dụ, nếu đầu vào là:

4
admin
secret123
user
password
admin
wrong
guest
secret123

Đầu ra sẽ là:

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

Thử thách này kiểm tra khả năng dùng strcmp() để so sánh các chuỗi nhằm xác định chúng có bằng nhau hay không, triển khai logic điều kiện dựa trên kết quả so sánh chuỗi và đếm số lần xuất hiện dựa trên kết quả so sánh của bạn.

Tự làm thử

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

int main() {
    int n;
    scanf("%d", &n);
    
    char username[100];
    char password[100];
    int successful_logins = 0;
    
    // TODO: Viết code của bạn ở đây
    // Xử lý từng lần đăng nhập bằng hàm (function) strcmp()
    // So sánh username với "admin" và password với "secret123"
    // In ra thông báo phù hợp và đếm số lần đăng nhập thành công
    
    printf("Total successful logins: %d\n", successful_logins);
    
    return 0;
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch C online