[C/C++]Hàm strtok cắt xâu – function strtok in string
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"); return 0; }
Cảm ơn bạn nhiều lắm, mình làm được rồi.
Chúc bạn học tập tốt. 😀 Ghé thăm blog thường xuyên nhé.
Bạn ơi cho mình hỏi là bây giờ có một chuỗi như thế này
Userid:1@Name:phuong@Password:trantuanphuong@
Userid:2@Name:khoa@Password:phamdangkhoa@
thì mình phải cắt như thế nào hả bạn. Mình thử dùng cách thông thường nhưng nó chỉ hiển thị user2 ra màn hình mà thôi
Mình không biết bạn muốn cắt theo kiểu nào tuy nhiên khi bạn dùng 1 lần thì nó chỉ cắt được 1 lần là đúng rồi. Bạn xem code bên trên của mình đó, mình phải sử dụng vòng lặp while thì nó mới cắt hết cả chuỗi theo ý mình.
anh quan oi cho em hoi char ** la gi co phai la lay gia tri cua con tro khong ma tai sao khong phai la char b?
char *b thì b là 1 chuỗi (mảng ký tự)
char **b thì đây là mảng chuỗi (danh sách các chuỗi)
Cho mình hỏi có cách nào đổi thứ tự tách của hàm strtok ko :v VD mình nhập tên Hoang Quoc Cuong nhưng mình muốn tách để in ra là Cuong Hoang Quoc :v
Cái này bạn tự đổi chỗ sau khi tách thôi vì nó tách lần lượt mà 😉
Chào Quân!
Mình có đoạn code như sau:
Khi mình chạy chương trình thì bị break. Nó yêu cầu phải đặt ký tự kết thúc cho chuỗi ch.
Bạn có thể giúp mình sửa lại code được không?
Xin cảm ơn!
Chắc bạn dùng lẫn lộn C với C++ nên bị thế. bạn xem lại theo ví dụ của mình nhé.
Cám ơn bạn! Vấn đề nằm ở chỗ mình khai báo biến char **ch;
Nếu mình khai báo mảng chuỗi char **ch như vậy và muốn dùng toán tử new để cấp phát bộ nhớ cho nó thì phải viết thế nào???
Bạn thay cách cấp phát trong bài của mình như thế này là ok
Cảm ơn bạn rất nhiều!
Nếu bạn có thời gian thì làm một bài hướng dẫn về hàm FindFirstFile và FindNextFile nhé!
Mình đang gặp chút khó khăn về hàm này mà đọc trên MSDN nhưng không hiểu mấy.
Chả biết sử dụng nó như thế nào cả.
CẢm ơn bạn,bạn làm ơn cho hỏi mình muốn làm bài :nhập vào hai xâu tìm từ xuất hiện ở cả hai xâu,và tìm từ chỉ xuất hiện ở xâu 1 chứ không xuất hiện ở xâu hai thì làm thế nào?
mình muốn hỏi về ý tưởng nhé,mình không biết mấy cái hàm như strok có phải thư viện chuẩn không nữa nên không dám dùng
Bạn dùng stock để cắt ra rồi duyệt từng từ ở xâu này, so sánh với từng từ ở xâu kia là được, bạn yên tâm hàm này là hàm trong thư viện chuẩn đó.
Em đang học về DSLK kép,và có 1 ý trong đó là: có một danh sách các chuỗi có dạng ngay.tháng.năm
Làm sao để so sánh được chúng để sắp xếp lại ( trước tiên là so sánh năm,nếu năm bằng nhau thì đến tháng rồi ngày ạ)
Anh cho em ý tưởng vs ạ. Tks anh.
Đúng rồi, vậy là ok mà.
Chào bạn!
Bạn có thể cho mình hỏi sao code của bạn mình sửa chỗ gán “b[index] = p” thành “strcpy(b[index],p)” thì lại lỗi Rune time vậy?
Mình cũng không rõ nhưng lệnh gán của mình là gán cả địa chỉ của con trỏ, lệnh copy của bạn chỉ copy giá trị. Do vậy có thể nó lỗi vì đó. Nhưng bạn cần xem nó lỗi chính xác ở dòng nào mới biết đk.
A cho e hỏi, ví dụ mình nhập:
anh , yeu . Em, mat. Roi !
thì khi xuất ra màn hình nó k hiện các , .
Anh chỉ em cách xuất ra đc k?? Em xin cảm ơn!
Bạn dùng strtok cắt theo các ký tự bạn ko muốn hiện. Sau đó ghép lại là đk
Ban oi cho mình hỏi mình dung visual studio 2015 khi sử dung strtok thì nó báo unsafe ban co cach ko bạn
Ah có thể trong VS họ đã tùy biến và loại bỏ bớt một số hàm. Bạn thử tìm kiếm google xem
Cảm ơn anh nhiều