Hỏi Hàm để Tách Chuỗi - Programming - Dạy Nhau Học Trang chủ » Tách Xâu Trong C++ » Hỏi Hàm để Tách Chuỗi - Programming - Dạy Nhau Học Có thể bạn quan tâm Tách Xâu Trong Pascal Tách Xâu Trong Python Tách X Căn X + 1 Tách Xiên Quay Tách Xơ Sẹo Rỗ 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 Xâu Trong C++ Tách String Trong C++ Tách Chuỗi Trong C++ (strtok) [C++ Cơ Bản] Tách Các Từ Trong Một Chuỗi | Thào A Vảng - YouTube Xâu Trong C++ - VNOI Hướng Dẫn Split String C++ - QA Bug Tách Các Từ Trong Chuỗi [Archive] - Diễn Đàn Tin Học Phân Tích Cú Pháp (tách) Một Chuỗi Trong C++ Bằng Cách Sử Dụng ... Tách Chuỗi Thành Các Từ Riêng Lẽ? - UIT - Forum Ví Dụ Tách Từ Trong Xâu - Lê Hữu Dũng Strtok Trong C++ - Techacademy Bài Toán Tách Từ Với String Của STL C++ - ItLab Code Runner Tách Từng Ký Tự Trong Chuỗi Như Thế Nào? - Cộng đồng C Việt Tách Chuỗi Số Trong Chuỗi??? - Cộng đồng C Việt