Cắt Chuỗi Trong C
Có thể bạn quan tâm
Hướng dẫn cắt chuỗi chuỗi trong C. Bạn sẽ học được cách sử dụng các hàm có sẵn như hàm strncpy() hoặc strtok() để cắt chuỗi sau bài viết này.
Cắt chuỗi trong C bằng hàm strncpy()
Hàm strncpy() trong C vốn được sử dụng giúp chúng ta copy số lượng ký tự chỉ định từ chuỗi ban đầu. Ứng dụng hàm strncpy(), chúng ta có thể copy một số lượng ký tự từ trong phạm vi chuỗi ban đầu để tạo ra chuỗi con, và qua đó hoàn thành được việc cắt chuỗi trong C.
- Xem thêm: Copy chuỗi trong C (strcpy, strcpy_s, strncpy)
Chúng ta sử dụng hàm strncpy() để cắt chuỗi trong C với cú pháp sau đây:
strncpy(target, source + begin, n)
Trong đó:
- target là chuỗi đích để chứa kết quả cắt
- source là chuỗi nguồn.
- begin là vị trí bắt đầu cắt trong chuỗi nguồn
- n là số ký tự sẽ cắt từ vị trí begin.
Hiểu đơn giản thì cú pháp trên sẽ cắt n ký tự từ vị trí begin trong chuỗi source và trả về kết quả là chuỗi target.
Cần chú ý là nếu chỉ định giá trị của n nhỏ hơn độ dài của chuỗi nguồn khi sử dụng hàm strncpy() thì ký tự kết thúc chuỗi \0 sẽ không được copy vào chuỗi đích, do đó chúng ta cần phải thêm xử lý nối ký tự này vào chuỗi đích target.
Ví dụ cụ thể, chúng ta sử dụng hàm strncpy() để cắt 5 ký tự từ vị trí thứ 3 trong chuỗi C như sau:
main() { char str[] = "01234567890"; char t[64]; strncpy( t, str+3, 5 ); /*Cắt 5 ký tự từ vị trí thứ 3 */ t[5] = '\0'; /*Thêm ký tự kết thúc chuỗi vào kết quả*/ printf( "%s\n", t );}//34567 |
Tự tạo hàm cắt chuỗi trong C với hàm strncpy
Ở trên là ví dụ đơn giản sử dụng hàm strncpy() để cắt chuỗi trong C. Thực tế khi sử dụng hàm này để cắt chuỗi thì chúng ta cần phải chú ý tơi nhiều trường hợp khác để tránh xảy ra lỗi trong chương trình.
Và chúng ta có thể tự tạo một hàm tổng quát để cắt chuỗi trong C thông qua strncpy() để xử lý trong tất cả các trường hợp như sau đây:
/*Tạo hàm cắt chuỗi trong C*/char* substring(char* source, size_t begin, size_t n, char* target){ int target_size = sizeof(target); /*Kiểm tra đầu vào và phát hiện lỗi nếu có*/ assert(source != NULL); assert(target != NULL); assert(n + 1 <= target_size); /*Kiểm tra vị trí cắt có nằm trong chuỗi không*/ if (begin < strlen(source)) { /*Cắt n ký tự từ vị trí begin trong chuỗi source*/ strncpy(target, source + begin, n); /*Thêm ký tự kết thúc chuỗi vào kết quả*/ target[n] = '\0'; } /* Bỏ qua hàm nếu như vị trí bắt đầu cắt nằm ngoài chuỗi ban đầu*/ else { target[0] = '\0'; } return target;}int main(void){ char str[] = "abcdef"; char target[4]; puts(substring(str, 0, 3, target )); //Cắt 3 ký tự từ vị trí 0 puts(substring(str, 2, 3, target )); //Cắt 3 ký tự từ vị trí 2 puts(substring(str, 2, 0, target)); //Cắt 0 ký tự từ vị trí 2 puts(substring(str, 5, 3, target)); //Cắt 3 ký tự từ vị trí 5 return 0;} |
Kết quả chương trình:
abccdef |
Cắt Chuỗi Theo Dấu Cách bằng hàm strtok
Cắt chuỗi văn bản (string) trong C thường được thực hiện bằng cách cắt chuỗi thành các phần con dựa trên dấu cách hoặc dấu phân tách khác. Bạn có thể sử dụng hàm strtok để thực hiện việc này. Dưới đây là một ví dụ:
int main() { char chuoi[] = "Hoc lap trinh C"; char *token; token = strtok(chuoi, " "); // Tách chuỗi bởi dấu cách while (token != NULL) { printf("%s\n", token); token = strtok(NULL, " "); // Lặp để tách các phần còn lại } return 0;} |
Trong ví dụ này, chuỗi “Hoc lap trinh C” được cắt thành các phần con “Hoc,” “lap,” “trinh,” và “C” bởi dấu cách.
HoclaptrinhC |
Cắt Chuỗi Theo Dấu Phân Tách bằng hàm strtok
Ngoài việc cắt chuỗi bằng dấu cách, bạn cũng có thể cắt chuỗi bằng các dấu phân tách khác nhau. Dưới đây là một ví dụ về cách cắt chuỗi bằng dấu phân tách dấu phẩy:
int main() { char chuoi[] = "apple,banana,cherry"; char *token; token = strtok(chuoi, ","); while (token != NULL) { printf("%s\n", token); token = strtok(NULL, ","); } return 0;} |
Trong ví dụ này, chuỗi “apple,banana,cherry” được cắt thành các phần con “apple,” “banana,” và “cherry” bởi dấu phân tách dấu phẩy.
applebananacherry |
Lưu Ý, Hàm strtok có một số hạn chế và lưu ý cần quan tâm. Nó làm thay đổi chuỗi ban đầu và không thể sử dụng cho chuỗi hằng. Hơn nữa, nếu bạn không sử dụng nó đúng cách, nó có thể dẫn đến lỗi thực thi và lỗ hổng bảo mật. Để đảm bảo an toàn, hãy luôn kiểm tra các điều kiện và xử lý đặc biệt cho trường hợp chuỗi trống hoặc không tìm thấy dấu phân tách.
- Xem thêm: strtok trong C)
Tổng kết
Cắt chuỗi là một kỹ năng quan trọng trong lập trình C, cho phép bạn xử lý và trích xuất thông tin từ chuỗi văn bản và số liệu. Các hàm như strncpy và strtok giúp bạn thực hiện công việc này một cách hiệu quả. Tuy nhiên, luôn nhớ kiểm tra điều kiện và xử lý các tình huống đặc biệt để đảm bảo an toàn và tính nhất quán trong mã của bạn.
URL Link
https://laptrinhcanban.com/c/lap-trinh-c-co-ban/chuoi-string-trong-c/cat-chuoi-trong-c/
Từ khóa » Hàm Tách Chuỗi Trong C
-
Tách Chuỗi Trong C (strtok)
-
Bài 18: Các Hàm Xử Lý Chuỗi Trong Lập Trình C - Khuê Nguyễn
-
Hỏi Hàm để Tách Chuỗi - Programming - Dạy Nhau Học
-
Lập Trình C: Hàm Xử Lý Chuỗi (String) | V1Study
-
C Cơ Bản: Hàm Strtok - DevIOT
-
Tách Các Từ Trong Chuỗi [Archive] - Diễn Đàn Tin Học
-
Hướng Dẫn Xử Lý Chuỗi Trong Lập Trình Vi điều Khiển (P1) - TAPIT
-
[C++ Cơ Bản] Tách Các Từ Trong Một Chuỗi | Thào A Vảng - YouTube
-
Tổng Hợp Các Hàm Xử Lý Chuỗi Trong Lập Trình C# » Chia Sẻ để Vui Vẻ
-
Xâu Trong C++ - VNOI
-
Làm Thế Nào để Tách Chuỗi Văn Bản Trong Excel Theo Dấu Phẩy ...
-
Làm Thế Nào để Strtok () Phân Tách Chuỗi Thành Mã Thông Báo Trong C?
-
Cắt Chuỗi Trong Excel - Cách Dùng Hàm Lấy Chuỗi Ký Tự - Ict-saigon