Hỏi Hàm để Tách Chuỗi - Programming - Dạy Nhau Học Trang chủ » Hàm Tách Chuỗi Trong 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 Trong Java Hàm Tách Chuỗi Trong Python Hàm Tách Chuỗi Trước Ký Tự Trong Excel Hàm Tách Chữ Và Số Trong Excel Hàm Tách Dãy Số 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 Trong C Tách Chuỗi Trong C (strtok) Cắt Chuỗi Trong C Bài 18: Các Hàm Xử Lý Chuỗi Trong Lập Trình C - Khuê Nguyễn Lập Trình C: Hàm Xử Lý Chuỗi (String) | V1Study C Cơ Bản: Hàm Strtok - DevIOT Tách Các Từ Trong Chuỗi [Archive] - Diễn Đàn Tin Học Hướng Dẫn Xử Lý Chuỗi Trong Lập Trình Vi điều Khiển (P1) - TAPIT [C++ Cơ Bản] Tách Các Từ Trong Một Chuỗi | Thào A Vảng - YouTube Tổng Hợp Các Hàm Xử Lý Chuỗi Trong Lập Trình C# » Chia Sẻ để Vui Vẻ Xâu Trong C++ - VNOI Làm Thế Nào để Tách Chuỗi Văn Bản Trong Excel Theo Dấu Phẩy ... Làm Thế Nào để Strtok () Phân Tách Chuỗi Thành Mã Thông Báo Trong C? Cắt Chuỗi Trong Excel - Cách Dùng Hàm Lấy Chuỗi Ký Tự - Ict-saigon