Hàm strtok(s1,s2) trả về chuỗi đầu tiên sau khi cắt s1 bởi các ký tự có trong chuỗi s2.
VD s1 = “nguyen, van quan” và ta dùng: char *p = strtok(s1,”, “) (có dấu phẩu và dấu cách) thì p là chuỗi: nguyen. Nếu muốn cắt tiếp chuỗi thì ta dùng strtok(NULL,s2) khi đó sẽ cắt chuỗi ban đầu bắt đầu từ vị trí mà trước đó đã dừng lại.
Ta sử dụng vào bài toán sau: nhập vào 1 xâu, sau đó viết nguợc lại các từ trong xâu đã nhập (các từ không chứa dấu phẩy, dấu chấm, đấu cách) và mỗi từ trên 1 dòng

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

    int main()
    {
            int index = 0;
            int i;
            char *a = (char *)malloc(100*sizeof(char));
            char **b = (char **)malloc(100*sizeof(char));;
            printf ("Nhap vao chuoi can dao nguoc: ");
            fflush(stdin);
            gets(a);

            char *p;
            p = strtok(a, ",. "); //cat chuoi bang cac ky tu ,. va space
            while(p != NULL)
            {
                    b[index] = p;
                    index++;
                    p = strtok(NULL, ",. "); //cat chuoi tu vi tri dung lai truoc do
            }
            for (i = index-1; i>=0; i--) //in ra cac tu theo thu tu dao nguoc
                    printf ("\n%s ", b[i]);
            printf ("\n");
            system ("pause");
            return 0;
    }
Advertisements