Chuyển đến nội dung chính

Strtok Trong C++

I. Strtok Trong C++ Là Gì

Hàm char *strtok(char *str, const char *delim) chia chuỗi str thành 1 dãy những token được phân biệt riêng rẽ bởi dấu tách delim (ví dụ: dấu phảy, …).

II. Khai Báo Hàm Strtok() Trong C++

Dưới đây là phần khai báo cho strtok() trong C:

char *strtok(char *str, const char *delim)

 

Tham số

str — Nội dung của chuỗi này được sửa đổi và được chia thành những chuỗi nhỏ hơn (các token).

delim — Đây là chuỗi chứa Delimiter (chỉ những dấu tách). Chúng có thể vô cùng đa dạng tùy vào từng lời gọi.

Trả về giá trị

Hàm này trả về con trỏ đến token cuối cùng được tìm thấy trong chuỗi. Một con trỏ null được trả về nếu không thu được token nào.

III. Ví Minh Họa Khai Báo Hàm Strtok() Trong C++

#include string.h
#include stdio.h

int main()
{
char str[80] = "Hoc C - co ban va nang cao - tai QTM";
const char s[2] = "-";
char *token;

/* lay token dau tien */
token = strtok(str, s);

/* duyet qua cac token con lai */
while( token != NULL )
{
printf( " %sn", token );

token = strtok(NULL, s);
}

return(0);
}

 

IV. Tách Toàn Bộ Chuỗi Con Từ Chuỗi Trong C

Hướng dẫn cách tách chuỗi chuỗi trong C. Bạn sẽ học được cách tách chuỗi trong C bằng các hàm tách chuỗi strtok(), cũng như các lưu ý khi sử dụng hàm strtok() trong C sau bài học này.

Tách chuỗi trong c | hàm strtok

Hàm strtok() trong C là một hàm có sẵn trong header file string.h, giúp chúng ta tách chuỗi trong chuỗi C bằng ký tự chỉ định.

Để có thể sử dụng được hàm strtok(), chúng ta cần phải viết thêm dòng #include <string.h> để load header file string.h vào trong chuơng trình.

Chúng ta sử dụng hàm strtok() để tách chuỗi trong chuỗi C với cú pháp sau đây:

strtok(str, sep)

Trong đó:

  • str là chuỗi cần tách
  • sep là ký tự phân tách. (sep viết tắt separator)

Hàm strtok() sẽ trả về vị trí đầu chuỗi của chuỗi con đầu tiên được phân tách bằng dấu phân cách từ chuỗi ban đầu dưới dạng con trỏ chuỗi trong C. Trong trường hợp không tìm thấy ký tự phân tách , giá trị NULL sẽ được trả về.

Cơ chế của hàm strtok() là điền ký tự kết thúc chuỗi \0 vào chuỗi ban đầu mỗi khi tìm thấy ký tự phân tách, do đó cần lưu ý là hàm strtok() sẽ làm biến đổi chuỗi ban đầu.

Lại nữa, hàm strtok() chỉ có thể tách một chuỗi con bằng dấu phân tách từ chuỗi ban đầu trong mỗi lần thực thi mà thôi.

Ví dụ cụ thể:

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

int main(void){
char str[50] = "Ha Noi,Ninh Binh,Nam Dinh,Thanh Hoa";

//Khai báo con trỏ chuỗi để chứa kết quả
char * p;

p = strtok(str, ",");
printf("%s\n", p);
}
//Ha Noi

 

Ở ví dụ này, hàm strtok() sẽ hoạt động với các bước như sau:

  1. Hàm strtok() bắt đầu tìm vị trí ký tự phân tách là dấu , ở bên trong chuỗi str.
  2. Sau khi tìm thấy vị trí dấu phẩy đầu tiên, hàm strtok() sẽ điền ký tự kết thúc chuỗi \0 vào vị trí tìm thấy. Khi đó, chuỗi ban đầu sẽ chuyển thành dạng Ha Noi\0Ninh Binh,Nam Dinh,Thanh Hoa.
  3. Hàm strtok() quay trở về đầu chuỗi ban đầu và trả về vị trí đầu chuỗi này dưới dạng con trỏ chuỗi trong C. Cuối cùng khi in con trỏ chuỗi này, chuỗi sẽ được in ra từ vị trí đầu chuỗi là ký tự H cho đến ký tự thúc chuỗi \0 (Ha Noi\0), do đó chuỗi kết quả Ha Noi sẽ được in ra màn hình.

Tách toàn bộ chuỗi con từ chuỗi trong C | hàm strtok

Ở phần trên chúng ta đã biết hàm strtok() trong C chỉ có thể giúp chúng ta tách một chuỗi con bằng dấu phân tách từ chuỗi ban đầu trong mỗi lần sử dụng mà thôi.

Do đó, để có thể tách toàn bộ chuỗi con từ chuỗi ban đầu trong C thì sau lần tách đầu tiên, chúng ta cần phải tạo ra một vòng lặp để lần lượt tách các chuỗi con con lại từ chuỗi ban đầu bằng hàm strtok().

Và lựa chọn sáng giá ở đây chính là vòng lặp while, khi mà chúng ta vốn không biết rõ số vòng lặp cần dùng là bao nhiêu trong chương trình.

Chúng ta sẽ viết chương trình tách toàn bộ chuỗi con từ chuỗi trong c như sau:

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

int main(void){
char str[50] = "Ha Noi,Ninh Binh,Nam Dinh,Thanh Hoa";
char * p;

//Tách chuỗi con lần đầu tiên
p = strtok(str, ",");
printf("%s\n", p);

//Tách chuỗi con từ lần thứ 2 trở đi
//Bằng cách sử dụng hàm strok cho tới khi kết quả NULL được trả về.
while(p != NULL) {
//Chỉ dịnh đối số NULL trong hàm strtok để tiếp tục tách chuỗi ban đầu
p = strtok(NULL, ",");

if(p != NULL) {
printf("%s\n", p);
}
}
return 0;
}
//Ha Noi
//Ninh Binh
//Nam Dinh
//Thanh Hoa

 

Ở đây chúng ta cần phải lưu ý rằng:

  1. Lần gọi hàm strtok() đầu tiên và các lần tiếp theo là khác nhau.
  2. Trong lần gọi strtok đầu tiên, chúng ta phải chỉ định đối số của hàm là chuỗi ban đầu để bắt đầu tách chuỗi. Trong các lần gọi tiếp theo, chúng ta phải chỉ định NULL làm đối số của hàm. Đối số này sẽ yêu cầu hàm tiếp tục tách từ chuỗi ban đầu đã truyền vào từ trước đó. Nếu chúng ta chỉ định lại chuỗi ban đầu hoặc một chuỗi khác thì kết quả hàm sẽ không tiếp tục tách nữa mà sẽ bắt đầu xử lý lại từ đầu.
  3. Khi không còn tìm thấy ký tự phân tách từ trong chuỗi ban đầu nữa, kết quả NULL sẽ được trả về, và khi đó thì vòng lặp While sẽ kết thúc.

V. Lưu Ý Khi Tách Chuỗi Trong C Bằng Hàm Strtok

Lưu ý thứ nhất

Giống như Kiyoshi đã phân tích ở trên, thì do cơ chế hàm strtok() sẽ điền thêm ký tự kết thúc chuỗi \0 vào các vị trí tìm thấy ký tự phân tách, nên chuỗi ban đầu sẽ bị thay đổi sau khi chúng ta sử dụng hàm strtok().

Bởi vậy, lưu ý đầu tiên khi sử dụng hàm này đó chính là, chuỗi ban đầu sẽ bị thay đổi. Do đó, bạn cần phải backup chuỗi này bằng cách copy nó chẳng hạn trước khi dùng hàm, và đối với các chuỗi không được thay đổi trong chương trình, thì bạn đừng sử dụng chuỗi với hàm strtok nhé.

Cách copy chuỗi có thể tham khảo tại bài dưới đây:

Lưu ý thứ hai

Chúng ta không nhất thiết chỉ chỉ định một ký tự làm ký tự phân tách, mà có thể chỉ định ký tự phân tách bằng chuỗi ký tự. Ví dụ như chúng ta có thể kết hợp nhiều dấu dấu cách với cụm từ để làm ký tự phân tách ” and ” như sau:

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

int main(void){
char str[50] = "Tom and Jerry and me";
char * p;

p = strtok(str, " and ");
printf("%s\n", p);

while(p != NULL) {
p = strtok(NULL, " and ");
if(p != NULL) {
printf("%s\n", p);
}
}
return 0;
}
//Tom
//Jerry
//me

 

The post Strtok Trong C++ first appeared on Techacademy.



source https://techacademy.edu.vn/strtok-trong-c/

Nhận xét

Bài đăng phổ biến từ blog này

Hướng Dẫn Cài Đặt Python Trên Máy Tính?

Python là một ngôn ngữ lập trình phổ biến và được sử dụng rộng rãi trong lĩnh vực phát triển phần mềm và khoa học dữ liệu. Để bắt đầu sử dụng Python trên máy tính của bạn, bạn cần cài đặt nó. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách cài đặt Python trên máy tính một cách dễ dàng. I. Cài Đặt Python Trên Vscode Python là một ngôn ngữ lập trình phổ biến và VS Code là một trình soạn thảo mã nguồn được ưa chuộng. Kết hợp cả hai, bạn có thể tận dụng lợi ích của cả hai công cụ để phát triển ứng dụng Python một cách hiệu quả. Trong bài viết này, chúng tôi sẽ hướng dẫn cách cài đặt Python trên VS Code. Bước 1: Cài đặt VS Code Trước khi bắt đầu, bạn cần cài đặt VS Code trên máy tính của mình. Truy cập trang web vscode.com, tải xuống phiên bản phù hợp với hệ điều hành của bạn và làm theo hướng dẫn trên màn hình để hoàn tất quá trình cài đặt. Bước 2: Cài đặt Extension Python cho VS Code Sau khi cài đặt VS Code, bạn cần cài đặt extension Python để hỗ trợ phát triển ứng dụng Python t...

Phím Tắt Eclipse Thông Dụng Và Tiện Lợi Nhất ! Đọc Ngay Nếu Bạn Vẫn Đang Dùng Chuột

Việc sử dụng các thao tác click chuột nhiều lần trong Eclipse khiến các coder nhàm chán và tốn thời gian, hãy cải tạo nó bằng các phím tắt trong Eclipse. Dưới đây là danh sách một số những phím tắt thông dụng bạn nên biết. phím tắt eclipse (1) Đầu tiên hãy sử dụng phím tắt Ctrl + Shift + L để hiển thị danh sách các phím tắt trong Eclipse. phím tắt eclipse (2) Danh sách tất cả những phím tắt trong Eclipse bạn có thể áp dụng, được chia thành 12 mục khác nhau tùy thuộc vào tác dụng của phím tắt: 1. Quản lý tập tin và dự án Ctrl + N Tạo dự án mới bằng Wizard Ctrl + Alt + N Tạo dự án , tập tin, lớp, vv Alt + F Mở dự án, tệp, v.v. Ctrl + Shift + R Mở Resource (tệp, thư mục hoặc dự án) Alt + Enter Hiển thị và truy cập các thuộc tính tệp Ctrl + S Save tập tin hiện tại Ctrl + Shift + S Save tất cả các tập tin Ctrl + W Đóng tệp hiện tại Ctrl + Shift + W Đóng tất cả các tệp F5 Làm mới nội dung của phần tử đã chọn bằng hệ thống tệp cục bộ 2. Cửa sổ trình chỉnh sửa F1...

Kiểu Date Trong Java

Date trong Java là 1 trong các class mô tả ngày tháng đầu tiên trong Java. Thật đáng tiếc là hầu hết các cách thức của nó đã lỗi thời, và thay vào đó là dùng các cách thức của java.util.Calendar. Nhưng bạn vẫn có thể dùng java.util.Date để mô tả ngày tháng. 1. Các Lớp Date, Time, Calendar Trong Java Java cung cấp 1 số class liên quan tới thời gian và lịch (Calendar), sau đây là danh sách các class này: Class Mô tả java.util.Date 1 lớp đại diện cho ngày tháng năm và thời gian. Tiếc là hầu hết các cách thức của nó đã bị lỗi thời, khuyến cáo là không nên dùng các cách thức đó, tuy nhiên lớp Date vẫn được dùng rỗng rãi. java.util.concurrent.TimeUnit TimeUnit là 1 Enum mô tả các đơn vị ngày tháng năm và thời gian. java.sql.Date 1 lớp mô tả ngày tháng năm. Thông tin về thời gian bị cắt bỏ. Lớp này thường dùng trong JDBC. java.sql.Time 1 lớp mô tả thời gian (Giờ phút giây, milli giây), và không chứa thông tin ngày tháng năm. Lớp này thường dùng trong...