×

So sánh hai chuỗi ký tự và trả về kết quả với strcmp() trong C

Trong lập trình C, việc so sánh hai chuỗi ký tự là một thao tác thường gặp. Để thực hiện điều này một cách chính xác, hàm strcmp() là công cụ được sử dụng phổ biến.

Hàm strcmp() thuộc thư viện tiêu chuẩn <string.h>. Cú pháp cơ bản của hàm này như sau:

int strcmp(const char *str1, const char *str2);

Cách hoạt động

Hàm strcmp() so sánh chuỗi ký tự str1 với chuỗi ký tự str2 theo thứ tự từ điển:

  • Nếu str1str2 giống nhau hoàn toàn, hàm trả về giá trị 0.
  • Nếu str1 nhỏ hơn str2 theo thứ tự từ điển, hàm trả về một giá trị âm.
  • Nếu str1 lớn hơn str2 theo thứ tự từ điển, hàm trả về một giá trị dương.

Cách sử dụng

Dưới đây là một ví dụ minh họa cách sử dụng hàm strcmp():

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

int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    int result;

    result = strcmp(str1, str2);

    if (result < 0) {
        printf("Chuỗi '%s' nhỏ hơn chuỗi '%s'.\n", str1, str2);
    } else if (result > 0) {
        printf("Chuỗi '%s' lớn hơn chuỗi '%s'.\n", str1, str2);
    } else {
        printf("Chuỗi '%s' bằng chuỗi '%s'.\n", str1, str2);
    }

    return 0;
}

Giải thích ví dụ

  • Chuỗi str1 được gán giá trị "apple".
  • Chuỗi str2 được gán giá trị "banana".
  • Hàm strcmp(str1, str2) so sánh hai chuỗi ký tự.
  • Biến result chứa kết quả so sánh:
    • Nếu result nhỏ hơn 0, nghĩa là "apple" nhỏ hơn "banana".
    • Nếu result lớn hơn 0, nghĩa là "apple" lớn hơn "banana".
    • Nếu result bằng 0, nghĩa là "apple" và "banana" giống hệt nhau.

Lợi ích và hạn chế

Lợi ích:

  • Hàm strcmp() rất dễ sử dụng và giúp tiết kiệm thời gian khi cần so sánh chuỗi ký tự.
  • Giúp lập trình viên tránh phải viết vòng lặp và logic so sánh thủ công.

Hạn chế:

  • Hàm phân biệt chữ hoa và chữ thường, "apple" và "Apple" sẽ được coi là khác nhau.
  • Không xử lý các ký tự UTF-8 đặc biệt, chỉ dùng tốt với chuỗi ký tự ASCII.

So sánh case-insensitive

Nếu cần so sánh chuỗi mà không phân biệt chữ hoa, chữ thường, bạn có thể sử dụng hàm strcasecmp() hoặc chuyển chuỗi về cùng một kiểu chữ bằng các hàm tolower() hoặc toupper() trước khi so sánh.

Ví dụ với strcasecmp():

#include <stdio.h>
#include <strings.h> // Chứa hàm strcasecmp()

int main() {
    char str1[] = "apple";
    char str2[] = "APPLE";
    int result;

    result = strcasecmp(str1, str2);

    if (result == 0) {
        printf("Chuỗi '%s' bằng chuỗi '%s' không phân biệt chữ hoa chữ thường.\n", str1, str2);
    } else {
        printf("Chuỗi '%s' khác chuỗi '%s' khi không phân biệt chữ hoa chữ thường.\n", str1, str2);
    }

    return 0;
}

Kết luận

Hàm strcmp() là công cụ mạnh mẽ và hiệu quả cho việc so sánh chuỗi ký tự trong lập trình C. Với cách sử dụng đơn giản và khả năng trả về kết quả nhanh chóng, hàm này thường là lựa chọn hàng đầu của các lập trình viên. Tuy nhiên, cần lưu ý những hạn chế của nó và cân nhắc sử dụng các biến thể như strcasecmp() khi cần thiết.

Comments