Hướng dẫn dùng strtok_r c trong PHP

Hàm strtok() sẽ nhận diện các dấu hiệu mà người dùng truyền vào.

Hướng dẫn dùng strtok_r c trong PHP

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Hàm trả về chuỗi con bắt đầu từ đầu chuỗi gốc và kéo dài đến vị trí đầu tiên xuất hiện của dấu hiệu và không bao gồm dấu hiệu đó.

Nếu không tồn tại dấu hiệu nào trong chuỗi, hàm sẽ trả về chuỗi ban đầu.

Cú pháp

Cú phápstrtok( $str, $tok);

Bài viết này được đăng tại [free tuts .net]

Trong đó:

  • $str là chuỗi cần tìm kiếm dấu hiệu.
  • $tok là dấu hiệu nhận biết để tìm kiếm. Nếu $tok là một chuỗi ( vd "string") hàm sẽ hiểu nó là một danh sách các dấu hiệu ( "s,t,r,i,n,g").
  • Lưu ý: nếu chỉ truyền vào $tok hàm sẽ tự động lấy phần còn lại của chuỗi khi thực hiện hàm strtok() trước đó và coi nó như là chuỗi $str (tìm hiểu ví dụ 2).

Ví dụ

Code

$string = "This is an example string";
echo strtok($string, "an") . "
"; echo strtok($string, "s") . "
"; echo strtok($string, "z") . "
";

Kết quả

This is 
Thi
This is an example string

Không sử dụng tham số:

Code

$string = "This is an example string";
echo strtok($string, " ") . "
"; //this echo strtok(" "). "
"; //$str lúc này là "is an example string" echo strtok(" "). "
"; //$str lúc này là "an example string" echo strtok(" "). "
"; //$str lúc này là "example string"

Kết quả

This
is
an
example

Tham khảo: php.net

Hàm strtok() sẽ nhận diện các dấu hiệu mà người dùng truyền vào.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Hàm trả về chuỗi con bắt đầu từ đầu chuỗi gốc và kéo dài đến vị trí đầu tiên xuất hiện của dấu hiệu và không bao gồm dấu hiệu đó.

Nếu không tồn tại dấu hiệu nào trong chuỗi, hàm sẽ trả về chuỗi ban đầu.

Cú pháp

Cú phápstrtok( $str, $tok);

Bài viết này được đăng tại [free tuts .net]

Trong đó:

  • $str là chuỗi cần tìm kiếm dấu hiệu.
  • $tok là dấu hiệu nhận biết để tìm kiếm. Nếu $tok là một chuỗi ( vd "string") hàm sẽ hiểu nó là một danh sách các dấu hiệu ( "s,t,r,i,n,g").
  • Lưu ý: nếu chỉ truyền vào $tok hàm sẽ tự động lấy phần còn lại của chuỗi khi thực hiện hàm strtok() trước đó và coi nó như là chuỗi $str (tìm hiểu ví dụ 2).

Ví dụ

Code

$string = "This is an example string";
echo strtok($string, "an") . "
"; echo strtok($string, "s") . "
"; echo strtok($string, "z") . "
";

Kết quả

This is 
Thi
This is an example string

Không sử dụng tham số:

Code

$string = "This is an example string";
echo strtok($string, " ") . "
"; //this echo strtok(" "). "
"; //$str lúc này là "is an example string" echo strtok(" "). "
"; //$str lúc này là "an example string" echo strtok(" "). "
"; //$str lúc này là "example string"

Kết quả

This
is
an
example

Tham khảo: php.net

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 ọ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 để 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 
#include

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


char * p;

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

Ở 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.

  • Xem thêm: While trong C và vòng lặp không giới hạn số lần

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 
#include

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


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



while(p != NULL) {

p = strtok(NULL, ",");

if(p != NULL) {
printf("%s\n", p);
}
}
return 0;
}




Ở đâ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.

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:

  • Xem thêm: Copy chuỗi trong C (strcpy, strcpy_s, strncpy)

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 
#include

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;
}



Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách tách chuỗi chuỗi trong C rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.

Viết bởi Kiyoshi. Đã đăng ký bản quyền tác giả tại <a title="Bạn được tự do chia sẻ bài viết nhưng phải để lại đường link bài viết từ laptrinhcanban.com. Bạn không được sử dụng tài liệu cho mục đích thương mại. Không được phép chỉnh sửa nội dung được phát hành trên website của chúng tôi" style="color:#fff;background-color:silver" rel="license noopener" target="_blank" href="https://creativecommons.org/licenses/by-nc-nd/4.0/">Creativecommons</a>&nbsp;và <a title="Bạn được tự do chia sẻ bài viết nhưng phải để lại đường link bài viết từ laptrinhcanban.com. Bạn không được sử dụng tài liệu cho mục đích thương mại. Không được phép chỉnh sửa nội dung được phát hành trên website của chúng tôi" style="color:#fff;background-color:silver" target="_blank" rel="noopener" href="https://www.dmca.com/Protection/Status.aspx?ID=1631afcd-7c4a-467d-8016-402c5073e5cd" class="dmca-badge">DMCA</a><script src="https://images.dmca.com/Badges/DMCABadgeHelper.min.js">

Bài viết liên quan

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> >>

Profile
Hướng dẫn dùng strtok_r c trong PHP

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.