Hỏi Hàm để Tách Chuỗi - Programming - Dạy Nhau Học Trang chủ » Tách Chuỗi C » Hỏi Hàm để Tách Chuỗi - Programming - Dạy Nhau Học Có thể bạn quan tâm Tách Chuỗi Có Dấu Gạch Ngang Tách Chuỗi Có điều Kiện Trong Excel Tách Chuỗi Java Tách Chuỗi Javascript Tách Chuỗi Js Hỏi hàm để tách chuỗi programming c++ nhatlonggunz (nhatlonggunz) February 28, 2022, 7:35am #1 Em đang làm thử hàm, trong đó, hàm này sẽ cắt 1 chuỗi bắt đầu từ vị trí pos mà mình nhập vào cho đến hết chuỗi lớn. Sau đó gán chuỗi mới đó (em tạm gọi là subString). Đây là code của em: char* cut(char* str, int pos, char* subStr) { char word; int index = 0; do{ word = str[pos]; subStr[index] = word; pos++; index++; }while(word != '\0'); str[pos] = '\0'; // return str; } int main() { int time, pos = 5; char str[] = "Hello World"; char subStr[] = ""; cut(str, pos, subStr); std::cout << str << std::endl << subStr << std::endl; return 0; } Với vị trí 5, em muốn chuỗi chính sẽ bị cắt ra, thì output sẽ là: str: "Hello" subStr: " World" Thế nhưng kết quả lại ra: str: "World" subStr: " World" Sau khi debug thì em thấy ở cái dòng subStr[index] = word; Nó sẽ thay đổi luôn cả 2 chuỗi. Có cách nào khắc phục cái này không ạ ? nguyenchiemminhvu (NCMV) May 17, 2015, 6:02am #2 Try this #include <iostream> using namespace std; char* substring(char* s,int pos) { char* t = &s[pos]; s[pos-1] = '\0'; return t; } int main() { char s[50] = "hello world"; char* t = substring(s,6); cout << s << endl; cout << t << endl; return 0; } 2 Likes Rok_Hoang (Minh Hoàng) May 17, 2015, 7:01am #3 bị mất 1 ký tự rồi… @nhatlonggunz thử này xem. biến pos của em đã bị cộng dồn lên rồi. #include <iostream> using namespace std; void cut(char *str, int pos, char *subStr) { char word; int index = 0; int index2 =pos; do{ word = str[index2]; subStr[index] = word; index2++; index++; }while(word != NULL); str[pos] = 0; } int main() { int time, pos = 5; char str[] = "Hello World"; char subStr[]=""; cut(str, pos, subStr); std::cout << str << std::endl << subStr << std::endl; getchar(); getchar(); return 0; } 2 Likes Gio (Gió) May 17, 2015, 7:37am #4 update : code không có lỗi nhưng có lẽ không khai báo kích thước nên đè bộ nhớ lên nhau khai báo kích thước subStr nếu không sẽ bị lỗi Đơn giản hơn void subString(char *str, int pos, char* subStr){ strcpy(subStr,str+pos); str[pos]=0; } 2 Likes nhatlonggunz (nhatlonggunz) May 18, 2015, 5:07am #5 Dạ cám ơn anh nhiều !!! Mà mọi người cho em hỏi, tại sao lại có tình trạng như trên ạ ? Khi em gán subStr[index] = word ấy. Mục đích của em là làm cái hàm tựa tựa strcpy ấy anh @Gio Hic, có ai giải thích hộ em tại sao code của em gặp tình trạng trên không :’( @ltd @Gio Gio (Gió) May 18, 2015, 5:16am #6 Thứ nhất là không khai báo bộ nhớ cho subStr cần thiết để chứa Kiểm tra cout<<distance(subStr,str)<<endl; // => 1 khi đó độ dài của xâu subStr nếu thiếu thì sẽ tràn sang bộ nhớ của str. Thứ hai là nếu khai báo đủ bộ nhớ thì thuật toán bị sai: vì khi đó pos sẽ chỉ đến cuối chuỗi, thay bằng 1 biến khác lưu vị trí của pos ban đầu 4 Likes DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » Tách Chuỗi C Tách Chuỗi Trong C (strtok) Cắt Chuỗi Trong C Lập Trình C: Hàm Xử Lý Chuỗi (String) | V1Study Tách Các Từ Trong Chuỗi [Archive] - Diễn Đàn Tin Học [C++ Cơ Bản] Tách Các Từ Trong Một Chuỗi | Thào A Vảng - YouTube C - Bài Tập 5.11: Tách Và In Ra Các Từ Trong Câu Theo Thứ Tự Ngược Lại Các Hàm Xử Lý Chuỗi Trong Lập Trình C - Khuê Nguyễn C Cơ Bản: Hàm Strtok - DevIOT Tách Từng Ký Tự Trong Chuỗi Như Thế Nào? - Cộng đồng C Việt Lập Trình Căn Bản C: Tách Họ, Chữ Lót, Tên Từ Chuỗi Họ Tên Phân Tích Cú Pháp (tách) Một Chuỗi Trong C ++ Bằng Cách Sử Dụng ...