Xoá Khoảng Trắng Trong Chuỗi - Programming - Dạy Nhau Học Trang chủ » Khoảng Trắng Trong Chuỗi » Xoá Khoảng Trắng Trong Chuỗi - Programming - Dạy Nhau Học Có thể bạn quan tâm Khoảng Trắng Trong C++ Là Gì Khoảng Trắng Trong Css Khoảng Trắng Trong Instagram Khoảng Trắng Trong Js Khoảng Trắng Trong Word 2003 Xoá khoảng trắng trong chuỗi programming c Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 18, 2019, 8:40am #1 (*)Viết chương trình nhập vào 1 chuỗi, cắt ký tự khoảng trắng trong chuỗi sao cho các từ cách nhau bằng 01 khoảng trắng. day la code cua mình: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char s[100]; int i,n,j,dem,lap=0; gets(s); dem=0; n=strlen(s); do { for(i=0;i<n;i++) { if((s[i]==' ')&&(s[i+1]==' ')) { dem++; for(j=i;j<n;j++) { s[j]=s[j+1]; } } } } while(dem==0); printf("Chuoi sau khi cat:\n"); for(i=0;i<(n-dem);i++) { printf("%c",s[i]); } return 0; } nhưng sao nó chỉ xóa được 2 khoảng trắng liên tiếp thôi, nhiều hơn 2 khoảng trắng liên tiếp thì nó chỉ xóa được 1 khoảng trắng,mọi người giúp với xem code mình sai chỗ nào Rok_Hoang (Minh Hoàng) April 3, 2015, 10:07am #2 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char s[100]="MOT HAI BA NAM"; int i,n,j,dem,lap=0; //gets(s); dem=0; n=strlen(s); //do //{ for(i=0;i<n;i++) { if((s[i]==' ')&&(s[i+1]==' ')) { //dem++; for(j=i;j<n;j++) { s[j]=s[j+1]; } n--; //so ki tu cua chuoi giam xuong i--; //sau buoc nay thi i se tang (vong for) nen ta se giam no xuong } } lap++; //} //while(dem==0); printf("Chuoi sau khi cat:\n"); //for(i=0;i<(n-dem);i++) for (i=0;i<n;i++) { printf("%c",s[i]); } return 0; } do vào vòng for thì i sẽ tăng lên nên i sẽ bị dâng lên, nên mình sẽ i-- nó trước khi vào vòng for mình cũng sửa chỗ n–, vì n là độ dài của chuỗi nên làm thế cho logic có ảnh hưởng nha mình thấy vòng while cũng không ổn, nếu như chuỗi không có kí tự space dư thừa thì sẽ bị loop mât… có thể bỏ vòng while đi 1 Like Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 12:33pm #3 uh để mình thử lại xem lúc đầu em cũng dùng vòng for nhưng kết quả vẫn zay nên thử vòng do while thấy cũng chả khác gì :3 hihi Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 10:14am #5 sao nó chạy vẫn không đúng nhỉ Rok_Hoang (Minh Hoàng) April 3, 2015, 10:18am #6 đúng mà nhỉ “MOT HAI BA NAM” đâu có thiếu nhịp nào đâu 1 Like Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 10:24am #7 tuc.jpg881×429 66.2 KB xem dùm em sai chỗ nào Rok_Hoang (Minh Hoàng) April 3, 2015, 10:27am #8 Screenshot (82).png1920×1080 186 KB ra đều tăm tắp mà nhỉ? cho xem kết quả đi bạn 1 Like rogp10 (rogp10) split this topic April 8, 2020, 2:38pm #9 A post was merged into an existing topic: Topic lưu trữ các post off-topic - version 3 Rok_Hoang (Minh Hoàng) April 3, 2015, 10:37am #10 i-- không phải i++ Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 10:41am #11 úi giời hèn gì nãy giờ không thấy,thank bác nhiệt tình Gio (Gió) April 3, 2015, 12:25pm #12 Code này hình như không xoá được khoảng trắng đầu và cuối Đề yêu cầu là 2 từ cách nhau mới có khoảng trắng thôi 1 Like Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 12:37pm #13 uh thì chỉ cần 2 từ cách nhau bằng 1 khoảng trắng là ok roi còn cắt đầu và cuối chuỗi thì mình làm được 1 Like Rok_Hoang (Minh Hoàng) April 3, 2015, 1:06pm #14 mình fix code của bạn kia thui cơ mà thêm trường hợp riêng là được mà nhỉ s[i+1]='\0' cái này để xóa đuôi s[0]=' ' cái này để xóa đầu 1 Like Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 1:37pm #15 Có hàm nào để cắt chuỗi không nhỉ Rok_Hoang (Minh Hoàng) April 3, 2015, 1:40pm #16 Bạn xem hàm memmove nhé, viết khéo léo sẽ thành hàm xóa kí tự xem hàm strtok, thường dùng để cắt chuỗi khi gặp kí tự ngắt 1 Like Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 1:44pm #17 Giải thích em về hàm strtok dc không anh Rok_Hoang (Minh Hoàng) April 3, 2015, 1:52pm #18 http://www.cplusplus.com/reference/cstring/strtok/?kw=strtok ví dụ có một câu "mot hai ba nam" thì lần đầu tiên truyền chuỗi này vào hàm (kí tự delimiter là space ' ') thì chuỗi còn "mot" tuy nhiên các dữ liệu ở phía sau vẫn còn. Lý do là hàm strtok sẽ làm cho các kí tự space tìm được trở thành '\0'. Lần gọi sau thì nó sẽ nhảy tới vị trí kế tiếp, con trỏ sẽ giữ địa chỉ của chuỗi “hai” (tất nhiên là dữ liệu của chuỗi vẫn còn). Đọc example trong link cho dễ hiểu. Hàm này biến đổi chuỗi nên là chép chuỗi qua chuỗi khác rồi hẵng làm strtok 1 Like Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 1:57pm #19 ồ, mở mang duoc kiến thức thank bác lần nữa Gio (Gió) April 3, 2015, 2:15pm #20 Bài này 1 vòng while là ra, sao lại phức tạp thế #include <stdio.h> #include <string.h> int trim(char * s){ int d=0,i=0,prev=-1; while(s[i]){ if(s[i]==' '&& (prev<0|| s[prev]==' ')){ d++;// 2 ' ' liên tiếp hoăc ' ' ở đầu chuỗi => tăng số kí tự bị xoá }else{ s[i-d]=s[i]; prev=i; } i++; } i-=d;// i is new length //trim right if(i&& s[i-1]==' ') s[i-1]= 0,d++; else s[i]=0; return d; } int main() { char s[100]=" d a b "; int d=trim(s); printf("%s# deleted %d char(s)",s,d); return 0; } 2 Likes Nguy_n_Trung_Ki_t (Nguyễn Trung Kiệt) April 3, 2015, 2:17pm #21 quan trõng nghĩ ko ra vòng while :)) 1 Like next page → 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 » Khoảng Trắng Trong Chuỗi Xóa Khoảng Trắng Trong Chuỗi C Đếm Khoảng Trắng Trong Chuỗi C Làm Cách Nào để đếm Số Khoảng Trắng Của Chuỗi Văn Bản Trong ... Java - Đếm Số Khoảng Trắng Có Trong Chuỗi được Nhập Từ Bàn Phím. Làm Thế Nào để Nhập Chuỗi Có Khoảng Trắng Trong C++? Xóa Tất Cả Các Khoảng Trắng Thừa Của Xâu Ký Tự S Xóa Khoảng Trắng Trong Chuỗi C - Trang Giới Thiệu Tốp Hàng Đầu ... Tạo Hàm để đếm Số Khoảng Trắng Trong Chuỗi C# | 200 Bài Tập C# Có ... SPACE - Đếm Khoảng Trắng Trong Chuỗi - Luyện Code Xóa Khoảng Trắng Thừa Khỏi Chuỗi - TutorialCup Xóa Bỏ Khoảng Trắng Trong Chuỗi - Cộng đồng C Việt