06 June 2012

[C] แบ่งข้อความด้วย strtok

ฟังก์ชัน strtok เป็นฟังก์ชันใน standard C library ใช้สำหรับแบ่ง string ออกเป็นส่วนๆ ตามเครื่องหมาย (delimiter) ที่กำหนด รูปแบบการใช้งานก็เป็น

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


str คือ string ที่ต้องการแบ่งเป็นหลายส่วน และ delim คือ string ของตัวแบ่ง (delimiter) ที่จะใช้แบ่ง string จะเห็นว่า type ของ str กำหนดเป็น char * เนื่องจากฟังก์ชัน strtok จะแก้ไข str เปลี่ยน delim ให้กลายเป็น null character เพื่อแบ่ง string

เมื่อมีการเรียกใช้งานฟังก์ชัน strtok แต่ละครั้ง ฟังก์ชันจะให้ string ที่แบ่งได้ 1 อัน โดยเริ่มจาก str ที่กำหนด ถ้าไม่สามารถแบ่งได้แล้ว เช่น เจอ null character ซะก่อน ก็จะให้ค่าเป็น ์๊NULL ถ้าข้อความที่ต้องการจะแบ่ง ประกอบด้วย token หลายๆ อัน เราจะต้องเรียก strtok หลายๆ ครั้ง แต่ครั้งที่สองเป็นต้นไป จะต้องกำหนดให้ str เป็น NULL เพื่อให้ strtok แบ่งต่อจากครั้งก่อน มิฉะนั้นมันจะเริ่มตั้งแต่ต้นใหม่

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

int main() {
char str[] = "5022771234,50,60,30";
char delim[] = ",";
char *token;

token = strtok(str, delim);
while(token != NULL) {
printf("Token: %s\n", token);
token = strtok(NULL, delim);
}

return 0;
}


จะได้ผลคือ

Token: 5022771234
Token: 50
Token: 60
Token: 30

ข้อควรระวัง strtok จะเปลี่ยนแปลง string ที่นำไปแบ่ง จนมีค่าไม่เหมือนเดิม เพราะตัวแบ่งจะถูกแทนที่ด้วย null character จนหมด ถ้าจำเป็นจะต้องเอา string นี้ไปใช้งานอื่นอีก ควรจะเก็บไว้เองก่อน

No comments: