×

Trả về độ dài chuỗi con chứa ký tự hợp lệ với strspn() trong C

Trong ngôn ngữ lập trình C, việc xử lý chuỗi là một công việc phổ biến nhưng cũng đầy thử thách. Một trong những hàm hữu ích để làm việc với chuỗi là strspn(). Hàm này giúp xác định độ dài của một chuỗi con ban đầu bao gồm các ký tự hợp lệ từ một tập hợp ký tự cụ thể. Bài viết này sẽ giới thiệu và giải thích cách sử dụng hàm này cùng với một số ví dụ cụ thể.

Khái niệm và cú pháp

Hàm strspn() được định nghĩa trong thư viện <string.h>. Hàm này có cú pháp như sau:

size_t strspn(const char *str1, const char *str2);
  • str1: Chuỗi đầu vào cần kiểm tra.
  • str2: Tập hợp các ký tự hợp lệ.

Hàm trả về độ dài chuỗi con ban đầu của str1 chứa toàn bộ các ký tự đều có mặt trong str2.

Nguyên lý hoạt động

Hàm strspn() bắt đầu duyệt chuỗi str1 từ đầu đến khi gặp phải một ký tự không thuộc tập hợp str2. Đến lúc đó, hàm dừng lại và trả về độ dài của chuỗi con đã duyệt qua.

Ví dụ minh họa

Hãy xem xét một số ví dụ để hiểu rõ hơn về cách hoạt động của hàm strspn().

Ví dụ 1

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

int main() {
    const char *str1 = "abcdefg";
    const char *str2 = "abc";
    size_t length = strspn(str1, str2);
    printf("The length of the initial segment: %zu\n", length);
    return 0;
}

Trong ví dụ này, str1 là "abcdefg" và str2 là "abc". Chuỗi con ban đầu của str1 chứa các ký tự 'a', 'b', và 'c' tất cả đều thuộc tập hợp str2. Khi gặp ký tự 'd', hàm dừng lại và trả về độ dài chuỗi con là 3.

Ví dụ 2

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

int main() {
    const char *str1 = "123abc456";
    const char *str2 = "123";
    size_t length = strspn(str1, str2);
    printf("The length of the initial segment: %zu\n", length);
    return 0;
}

Ở đây, str1 là "123abc456" và str2 là "123". Chuỗi con ban đầu của str1 là "123", chứa các ký tự đều có mặt trong str2. Khi gặp 'a', hàm dừng lại và kết quả trả về là 3.

Ứng dụng thực tế

Hàm strspn() rất hữu ích trong nhiều tình huống thực tế, chẳng hạn khi cần kiểm tra định dạng của một chuỗi đầu vào như địa chỉ IP, số điện thoại hoặc mã bưu điện để đảm bảo chúng tuân thủ một tập hợp ký tự cụ thể.

Ví dụ kiểm tra định dạng số điện thoại

Dưới đây là một ví dụ sử dụng strspn() để kiểm tra xem một chuỗi có phải là số điện thoại hợp lệ hay không (chỉ chứa các ký tự số).

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

bool is_valid_phone_number(const char *phone_number) {
    const char *valid_chars = "0123456789";
    size_t len = strspn(phone_number, valid_chars);
    return len == strlen(phone_number);
}

int main() {
    const char *phone1 = "1234567890";
    const char *phone2 = "123-456-7890";

    printf("Is phone1 valid? %s\n", is_valid_phone_number(phone1) ? "Yes" : "No");
    printf("Is phone2 valid? %s\n", is_valid_phone_number(phone2) ? "Yes" : "No");

    return 0;
}

Trong đoạn mã này, hàm is_valid_phone_number kiểm tra xem chuỗi phone_number có chứa các ký tự chỉ nằm trong tập hợp "0123456789" hay không. Nếu độ dài chuỗi con hợp lệ bằng đúng độ dài của chuỗi ban đầu, thì số điện thoại được coi là hợp lệ.

Kết luận

Hàm strspn() là một công cụ mạnh mẽ và tiện lợi khi làm việc với chuỗi trong C, giúp bạn nhanh chóng kiểm tra các ký tự hợp lệ trong một chuỗi con. Thao tác này rất hữu ích trong nhiều tình huống khác nhau, từ xác thực đầu vào đến xử lý chuỗi phức tạp. Hy vọng bài viết này đã cung cấp cho bạn cái nhìn rõ ràng và minh họa cụ thể về cách sử dụng hàm strspn() trong các dự án lập trình của bạn.

Comments