Thắc Mắc Về Chương Trình Tách Tên Và Họ Lót Trong C - Dạy Nhau Học Trang chủ » Tách Từng Từ Trong Một Chuỗi C » Thắc Mắc Về Chương Trình Tách Tên Và Họ Lót Trong C - Dạy Nhau Học Có thể bạn quan tâm Tách Từ Tiếng Anh Tách Từ Tiếng Việt Tách Từ Tiếng Việt Python Tách Từ Tiếng Việt Vntokenizer Tách Từ Trong Chuỗi C Thắc mắc về chương trình tách tên và họ lót trong C programming c Hoai_Nam_Truong (Hoài Nam Trương) May 25, 2017, 9:46am #1 Xin chào m.n, Như tiêu đề, em thắc mắc về chương trình tách tên và họ lót trong C , không biết chương trình họat động như thế nào ? đây là code mẫu em kiếm trên google #include < stdio.h > #include < conio.h > #include < string.h > void tachten(char s[], char ten[], char lot[]) { int i, j, n; n = strlen(s); for (i = n - 1; i > 0; i--) if (s[i] == ' ') break; for (j = 0; j < i; j++) lot[j] = s[j]; lot[i] = '\0'; for (j = i + 1; j < n; j++) ten[j - i - 1] = s[j]; ten[n - i - 1] = '\0'; } void main(void) { char s[30], ten[20], lot[20]; printf(" nhap ho va ten \n"); gets(s); tachten(s, ten, lot); printf(" \n ho va chu lot: \n"); puts(lot); printf(" ten: \n"); puts(ten); getch(); } Kết quả in ra thì đúng,nhưng em không hiểu ở function tachten[] nó họat động như thế nào, em ngồi suy mãi mà không ra mong anh chị giải đáp thắc mắc giúp em, em xin cảm ơn noname00 (HK boy) May 25, 2017, 9:00am #2 Bạn sửa lại indent. Code xấu quá :’( Về cơ bản là tách giữa họ, đệm và tên có các dấu cách. Ví dụ, có 1 người tên Nguyễn Văn A thì Nguyễn là họ, Văn là đệm, A là tên, giữa họ và đệm, đệm và tên có 1 dấu cách. Vì thế, cứ đến một dấu cách nào đấy là hết 1 từ (bạn biết bài toán tách từ trong xâu không? Giữa 2 dấu cách là 1 từ, bài này cũng gần như vậy). Ta dễ tách tên khỏi xâu nhất, do vậy ta sẽ for từ cuối xâu về đầu xâu, gặp dấu cách đầu tiên thì dấu cách đó chính là dấu cách ngăn giữa tên và đệm (vị trí từ dấu cách đó -> cuối xâu là tên). Cứ tương tự cho đến khi ta tách hết được đệm và họ. 2 Likes Hoai_Nam_Truong (Hoài Nam Trương) May 25, 2017, 9:11am #3 Hoai_Nam_Truong: for (j=0;j<i;j++) lot[j]=s[j]; lot[i]=’\0’; for (j=i+1;j<n;j++) ten[j-i-1]=s[j]; ten[n-i-1]=’\0’; cảm ơn anh, Nghe anh giải thích thì em cũng hiểu được một phần rồi nhưng còn ở đoạn code này nó hoạt động như thế nào ạ Dao_An (Đào An) May 25, 2017, 9:26am #4 lên google gõ học học debug, chứ ko có code sẵn mà còn ko hiểu thì chết đấy 1 Like noname00 (HK boy) May 25, 2017, 9:31am #5 Ví dụ: Nguyen Van A __________^_ | | \ họ+đệm i tên i là vị trí của dấu cách đầu tiên kể từ bên phải (được xác định qua vòng for i ngược ở trên), vậy thì từ vị trí 0 (đầu tiên) đến vị trí i-1 là họ+đệm (vòng for(j=0; j<i; j++) thể hiện điều đó), vị trí lot[i] là vị trí kết thúc xâu char[] (theo lí thuyết về xâu) nên ta gán \0 (kí tự null)); vị trí i+1 đến cuối là tên (vòng for(j=i+1; j<n; j++) thể hiện điều đó), vị trí ten[n-i-1] cũng gán là null vì nó là vị trí kết thúc xâu. Về kí tự null ở cuối xâu được thể hiện qua mảng char, bạn đọc lại lí thuyết (mình cũng không biết phải gọi nó là gì cho chính xác, tóm lại là ở cuối xâu có 1 kí tự null) 1 Like Hoai_Nam_Truong (Hoài Nam Trương) December 1, 2021, 3:24am #6 noname00: gán \0 (kí tự null)); vị trí i+1 đến cuối là tên (vòng for(j=i+1; j<n; j++) thể hiện điều đó), vị trí ten[n-i-1] cũng gán là null vì nó là vị trí kết thúc xâu. Về kí tự null ở cuối xâu được thể hiện qua mảng char, b cảm ơn anh, em đã hiểu rồi noname00 (HK boy) May 25, 2017, 9:42am #7 @Hoai_Nam_Truong: //tag để bạn nhớ đọc: Lần sau nên đọc và ngẫm, không nên chỉ paste code lên đây và hỏi. Indent cũng là một phương tiện giúp hiểu code dễ hiểu hơn (code không indent thế này đọc chỉ có ngu người). Nên tìm nguồn code có cả tutorial sẵn để đọc (điều này tốt với newbie). Không nên tìm code xấu. Nắm vững lí thuyết. Ví dụ như ở dòng gán null, nếu hiểu lí thuyết thì hiểu ngay được dòng này. Code nhiều để khôn ra. Ít nhất thì code nhiều sẽ lên tay, tự tay mình code thuật toán sẽ vỡ ra nhiều điều: về phong cách code, về cấu trúc, về thuật toán,… và để hiểu thuật toán, không cần phải dạo lên mạng, đọc hết code nọ code kia về thuật toán mà chả sờ gì đến bàn phím. Đọc phải code mới ngấm được thuật toán, nếu chỉ đọc không cũng chỉ à à phút chốc rồi quên sạch. Code nhiều thì sẽ biết debug (hoặc lên gg tham khảo cách debug code như @Dao_An chỉ dẫn). Có debug có “khôn”. 1 Like Tony_Shovel (Tony Shovel) December 20, 2018, 4:38am #8 code của mình như sau: void splitName(char str[], char subA[], char subB[], char subC[], char letter) { char *sub1 = strchr(str, letter); char *sub2 = strrchr(str, letter); /**Get the subA**/ int size = strlen(str) - strlen(sub1); strncpy(subA, str, size); /**Get the subB**/ size = strlen(sub1) - strlen(sub2) - 1; strncpy(subB, sub1 + 1, size); /**Get the subC**/ strcpy(subC, sub2 + 1); } rogp10 (rogp10) December 20, 2018, 6:40am #9 noname00: Về kí tự null ở cuối xâu được thể hiện qua mảng char, bạn đọc lại lí thuyết (mình cũng không biết phải gọi nó là gì cho chính xác, tóm lại là ở cuối xâu có 1 kí tự null) Kí tự 0x00 gọi là NUL con trỏ mới là NULL. Mà họ tên đầy đủ có thể có 4, 5, … chữ thì tách kiểu gì nhỉ? 2 Likes Ade_Ray_Evans (Ade Ray Evans) March 23, 2019, 12:17am #10 Em thấy code bác hay, nhưng nếu họ tên kiểu thiếu phần tử thì sẽ gây lỗi ngay Ví dụ: Huỳnh Lập, Luân. pham_quang_duc (pham quang duc) December 1, 2021, 3:18am #11 ten[j-i-1]=s[j]; ten[n-i-1]=’\0’; đoạn này hoạt động sao vậy mn chỉ em với noname00 (HK boy) December 1, 2021, 3:24am #12 Mình đã giải thích ở comment trên, bạn đọc lại nhé. 1 Like pham_quang_duc (pham quang duc) December 1, 2021, 3:57am #13 em hiểu vòng lặp for nhưng em ko hiểu cái đoạn này ý ten[j - i - 1] = s[j]; 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 Từng Từ Trong Một Chuỗi C Tách Chuỗi Trong C (strtok) 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 Tách Từ Ra Khỏi Chuỗi Và đưa Vào Mảng Trong Lập Trình C? Lập Trình C: Hàm Xử Lý Chuỗi (String) | V1Study Tách Chuỗi Thành Các Từ Riêng Lẽ? - UIT - Forum Bài Toán Tách Từ Với String Của STL C++ - ItLab Code Runner Làm Sao để Có Thể Tách Từng Từ Trong Xâu Của Mảng Các Xâu Các Hàm Xử Lý Chuỗi Trong Lập Trình C - Khuê Nguyễn Java - Tách Các Từ Có Trong Chuỗi Và Hiển Thị Mỗi Từ Trên 1 Dòng. Phân Tích Cú Pháp (tách) Một Chuỗi Trong C ++ Bằng Cách Sử Dụng ... Làm Thế Nào để đếm Các Từ Trong Một Chuỗi? - Banhoituidap Strtok Trong C++ - Techacademy Bài 62. Bài Tập Chuỗi Trong C Có Lời Giải - Lập Trình Không Khó Lập Trình Căn Bản C: Tách Họ, Chữ Lót, Tên Từ Chuỗi Họ Tên Một Số Bài Tập Về Chuỗi Kí Tự Trong C++ CÁCH GIẢI ...