Hàm strlen() trong C/C++
Trong lập trình C/C++, việc làm việc với chuỗi là một phần quan trọng và phổ biến. Để xử lý chuỗi một cách hiệu quả, các hàm thư viện đã được cung cấp để thực hiện các tác vụ cơ bản như tính độ dài của chuỗi, sao chép chuỗi, so sánh chuỗi, và nhiều tác vụ khác. Trong bài này, mình sẽ tìm hiểu về một trong những hàm quan trọng nhất trong thư viện chuỗi của C/C++, đó là hàm strlen().
Hàm strlen()
được sử dụng để tính độ dài của một chuỗi kết thúc bằng ký tự null-terminator (\0)
. Trong phần tiếp theo, mình sẽ đi sâu vào cú pháp, cách sử dụng, cũng như các vấn đề liên quan đến hàm này. Hãy cùng tìm hiểu!
Cú pháp và cách sử dụng hàm strlen() trong C/C++
Cú pháp của hàm strlen()
size_t strlen(const char *str)
Trong đó:
str:
Con trỏ đến chuỗi cần tính độ dài.size_t:
Kiểu dữ liệu unsigned integer dùng để lưu trữ độ dài của chuỗi.
Cách sử dụng hàm strlen() để tính độ dài của chuỗi
- Hàm
strlen()
trả về số lượng ký tự trong chuỗi str trước khi gặp ký tựnull-terminator (\0).
Ví dụ:
#include <stdio.h> #include <string.h> int main() { char str[] = "Chào mừng bạn đến với freetuts.net!"; size_t len = strlen(str); printf("Chiều dài của chuỗi: %zu\n", len); return 0; }
Output:
Chiều dài của chuỗi: 45
Điều chỉnh cách sử dụng hàm strlen()
với các kiểu dữ liệu khác nhau
- Hàm
strlen()
chỉ nhận vào con trỏ tới một chuỗi ký tự (char*). - Nếu bạn muốn sử dụng với các kiểu dữ liệu khác như
wchar_t,
bạn cần sử dụng các hàm tương ứng nhưwcslen().
Ví dụ:
#include <stdio.h> #include <wchar.h> int main() { wchar_t wstr[] = L"Chào mừng bạn đến với tự học lập trình Freetuts.net!"; size_t len = wcslen(wstr); printf("Chiều dài của chuỗi: %zu\n", len); return 0; }
Output:
Chiều dài của chuỗi: 52
Đây là những cách cơ bản và linh hoạt để sử dụng hàm strlen()
trong các tình huống khác nhau trong lập trình C/C++.
Cách xử lý trường hợp lỗi khi sử dụng hàm strlen() trong C/C++
Xử lý trường hợp chuỗi không kết thúc bằng ký tự null-terminator
- Hàm
strlen()
yêu cầu chuỗi kết thúc bằng ký tự null-terminator (\0). Nếu chuỗi không kết thúc bằng ký tự này, kết quả có thể không chính xác hoặc lỗi. - Để tránh lỗi này, luôn đảm bảo rằng chuỗi bạn truyền vào hàm strlen() phải kết thúc bằng ký tự null-terminator.
Ví dụ:
#include <stdio.h> #include <string.h> int main() { char str[] = "Chào mừng bạn đến với tự học lập trình Freetuts.net!"; // Thêm ký tự null-terminator vào cuối chuỗi str[12] = '\0'; size_t len = strlen(str); printf("Chiều dài của chuỗi: %zu\n", len); return 0; }
Output:
Chiều dài của chuỗi: 12
Xử lý trường hợp tham số không hợp lệ
- Hàm
strlen()
chỉ chấp nhận con trỏ trỏ đến một chuỗi ký tự (char*). Nếu bạn truyền tham số không phải là một con trỏ hoặc con trỏ không hợp lệ, hành vi của chương trình là không xác định. - Đảm bảo rằng bạn chỉ truyền vào hàm
strlen()
một con trỏ hợp lệ trỏ đến một chuỗi ký tự.
Ví dụ:
#include <stdio.h> #include <string.h> int main() { char *ptr = NULL; size_t len = strlen(ptr); // Truyền con trỏ không hợp lệ printf("Chiều dài của chuỗi: %zu\n", len); return 0; }
Trên đây là các cách xử lý trường hợp lỗi khi sử dụng hàm strlen()
để đảm bảo tính đúng đắn và an toàn trong lập trình C/C++.
So sánh với các hàm tương tự trong C/C++
So sánh với hàm sizeof()
- Hàm
sizeof()
trả về kích thước của một biến hoặc kiểu dữ liệu trong byte. - Không giống như
strlen()
,sizeof()
không yêu cầu chuỗi kết thúc bằng ký tự null-terminator và có thể được sử dụng để tính toán kích thước của mảng ký tự kể cả khi không có ký tự null-terminator. - Tuy nhiên,
sizeof()
không thực hiện được tính độ dài của một chuỗi ký tự cụ thể.
Ví dụ:
#include <stdio.h> #include <string.h> int main() { char str[] = "Hello freetuts.net"; size_t len1 = sizeof(str); // Kích thước của mảng str size_t len2 = sizeof(str) / sizeof(str[0]); // Số phần tử của mảng str printf("Size of the array: %zu\n", len1); printf("Số phần tử trong mảng: %zu\n", len2); return 0; }
Output:
Size of the array: 19 Số phần tử trong mảng: 19So sánh với hàm std::string::length()
- Hàm
std::string::length()
trả về độ dài của một đối tượng chuỗistd::string.
- Khác với
strlen()
là hàmstd::string::length()
không yêu cầu chuỗi kết thúc bằng ký tự null-terminator. - Hàm
std::string::length()
là một phương thức của lớpstd::string
trong thư viện chuẩn C++ (STL), do đó chỉ áp dụng được cho các đối tượng chuỗi kiểustd::string.
Ví dụ:
#include <iostream> #include <string> int main() { std::string str = "Hello freetuts.net"; size_t len = str.length(); std::cout << "Chiều dài của chuỗi: " << len << std::endl; return 0; }
Output:
Chiều dài của chuỗi: 18
Trên đây là so sánh giữa hàm strlen()
với hàm sizeof()
và hàm std::string::length()
để đánh giá tính linh hoạt và sự phù hợp trong các tình huống lập trình khác nhau.
Ví dụ minh họa hàm strlen() trong C/C++
Ví dụ về cách sử dụng hàm strlen() trong các tình huống khác nhau:
Tính độ dài của chuỗi c-style.
#include <stdio.h> #include <string.h> int main() { char str[] = "Hello, Tự học lập trình freetuts.net!"; size_t len = strlen(str); printf("Chiều dài của chuỗi: %zu\n", len); return 0; }
Output:
Chiều dài của chuỗi: 44
Sử dụng trong vòng lặp để duyệt qua từng ký tự của chuỗi và đếm số ký tự.
#include <stdio.h> #include <string.h> int main() { char str[] = "Hello, Tự học lập trình Freetuts.net!"; size_t len = 0; for (size_t i = 0; i < strlen(str); ++i) { if (str[i] != ' ') { ++len; } } printf("Số ký tự trong chuỗi (không bao gồm dấu cách): %zu\n", len); return 0; }
Output:
Số ký tự trong chuỗi (không bao gồm dấu cách): 39
Bài tập thực hành
Viết các đoạn mã sử dụng hàm strlen() để tính độ dài của chuỗi.
- Viết chương trình yêu cầu người dùng nhập vào một chuỗi và sau đó in ra độ dài của chuỗi đó bằng hàm strlen().
#include <stdio.h> #include <string.h> int main() { char str[100]; printf("Nhập một chuỗi: "); scanf("%s", str); size_t len = strlen(str); printf("Chiều dài của chuỗi: %zu\n", len); return 0; }
Output:
Nhập một chuỗi: freetut.net Chiều dài của chuỗi: 11
- Viết một chương trình yêu cầu người dùng nhập vào một danh sách các từ, mỗi từ cách nhau bằng dấu cách. Sau đó, in ra độ dài của từng từ trong danh sách.
#include <stdio.h> #include <string.h> int main() { char str[100]; printf("Nhập danh sách các từ cách nhau bởi dấu cách: "); fgets(str, sizeof(str), stdin); char* token = strtok(str, " "); while (token != NULL) { printf("Độ dài của\"%s\": %zu\n", token, strlen(token)); token = strtok(NULL, " "); } return 0; }
Output:
Kết bài
Trên đây là những thông tin về hàm strlen()
trong ngôn ngữ lập trình C/C++, bao gồm cú pháp, cách sử dụng, xử lý trường hợp lỗi, so sánh với các hàm tương tự, và các ví dụ minh họa cũng như bài tập thực hành. Hi vọng rằng sau khi tham khảo, bạn đã hiểu rõ về cách sử dụng hàm này để tính độ dài của chuỗi. Hãy thực hành và tìm hiểu thêm để nắm vững kiến thức.
Bài giải
-------------------- ######## --------------------
Câu hỏi thường gặp liên quan:
- Hàm strcpy() trong C/C++
- Hàm strlen() trong C/C++
- Hàm strcat() trong C/C++
- Hàm strcmp() trong C/C++
- Hàm strchr() trong C/C++
- Hàm strstr() trong C/C++
- Hàm atof() trong C/C++
- Hàm strtol() và strtoul() trong C/C++
- Hàm isalnum() trong C/C++
- Hàm isalpha() trong C/C++
- Hàm isdigit() trong C/C++
- Hàm islower(), isupper() trong C/C++
- Hàm memset() trong C/C++
- Hàm memcpy() trong C/C++
- Hàm memmove() trong C/C++