Hỏi Hàm để Tách Chuỗi - Programming - Dạy Nhau Học Trang chủ » Hàm 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 Hàm Tách Chuỗi Có điều Kiện Trong Excel Hàm Tách Chuỗi Dữ Liệu Trong Excel Hàm Tách Chuỗi Ký Tự Hàm Tách Chuỗi Ký Tự đặc Biệt Trong Excel Hàm Tách Chuỗi Ký Tự Trong Excel 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 » Hàm Tách Chuỗi C++ Tách Chuỗi Trong C++ (strtok) Tách String Trong C++ [C++ Cơ Bản] Tách Các Từ Trong Một Chuỗi | Thào A Vảng - YouTube Hướng Dẫn Split String C++ - QA Bug C Cơ Bản: Hàm Strtok - DevIOT Strtok Trong C++ - Techacademy Xâu Trong C++ - VNOI Bài 18: Các Hàm Xử Lý Chuỗi Trong Lập Trình C - Khuê Nguyễn Vi Du Về Hàm Tách Chuỗi Trong MFC C++ - Nhật Ký Tuổi Trẻ Tách Các Từ Trong Chuỗi [Archive] - Diễn Đàn Tin Học Lập Trình C: Hàm Xử Lý Chuỗi (String) | V1Study C++ — C ++: Tách Một Chuỗi Thành Một Mảng Tách Chuỗi Thành Các Từ Riêng Lẽ? - UIT - Forum