Bài toán: Xóa tất cả các khoảng trắng thừa của xâu ký tự s
Input: chuỗi s
Xử lý: trước tiên cần viết hàm xóa
void xoa(char s[90],int vitrixoa) { int n=strlen(s);//gán n= độ dài của chuỗi for(int i=vitrixoa;i<n;i++)//duyệt chuỗi từ vị trí cần xóa s[i]=s[i+1]; s[n-1]='\0'; //kết thúc }
Tiếp đến là viết hàm xóa khoản trắng
Duyệt chuỗi, nếu s[i] là khoản trắng và s[i+1] cũng là khoản trắng thì xóa 1 khoản trắng đi, xóa xong cần giảm i xuống đê quay lại vị trí khoản trắng để kiểm tra và tiếp tục xóa.
Ví dụ: nếu không giảm i xuống thì chuỗi: Le Cong Danh (ở đây có 3 khoản trắng)
Sẽ trở thành chuỗi: Le Cong Danh (ở đây có 2 khoản trắng)
Đúng ra là chuỗi nó phải ra: Le Cong Danh
Rồi nếu ở trước chữ Le nó có 1 khoản trắng thì nó không xóa, còn nhiều khoản trắng thì nó xóa để lại 1 khoản trắng. Vậy thì làm sao đê xóa khoản trắn đó.
Mình sẽ kiểm tra nếu s[0] là khoản trắng thì dùng hàm xóa đã viết ở trên xóa nó đi
Như vậy thì ở cuối Danh chữ cũng vậy, như xóa khoản trắng trước chữ Le thôi
Hàm xóa khoản trắng
void xoakt(char*s) { for(int i=0;i<strlen(s);i++) if(s[i]==' '&& s[i+1]==' ') { xoa(s,i); i--; } if(s[0]==' ') xoa(s,0); if(s[strlen(s)-1]==' ') xoa(s,strlen(s)-1); }
Chương trình
#include<stdio.h> #include<conio.h> #include<string.h> void xoa(char s[90],int vitrixoa); void xoakt(char*s); void main() { char s[90]; printf("nhap chuoi "); gets(s); xoakt(s); puts(s); getch(); } void xoa(char s[90],int vitrixoa) { int n=strlen(s);//gán n= độ dài của chuỗi for(int i=vitrixoa;i<n;i++)//duyệt chuỗi từ vị trí cần xóa s[i]=s[i+1]; s[n-1]='\0'; //kết thúc } void xoakt(char*s) { for(int i=0;i<strlen(s);i++) if(s[i]==' '&& s[i+1]==' ') { xoa(s,i); i--; } if(s[0]==' ') xoa(s,0); if(s[strlen(s)-1]==' ') xoa(s,strlen(s)-1); }
Mình chia sẽ code này đê các bạn tham khảo các vấn đề tương tự. Tuy nhiên các bạn nên tự làm lại, đừng nên copy. Nếu gặp vấn đề gì khó khăn, hoặc thắc mắc gì, các bạn có thể đặt câu hỏi ở cuối bài. Mình sẽ giải đáp.
Chúc các bạn thành công!
nếu trong 1 mảng ký tự có cả số cả chữ làm sao để xóa các ký tự chữ còn số để lại ạ
ngu vcl dm
🙂
cho em hoi trong ham` xoa cua minh tai sao s[i]=s[i+1] va` s[n-1] phai — ạ, em là newbie mong nhận được câu trả lời, em xin cảm ơn
cho em hoi trong ham` xoa cua minh tai sao s[i]=s[i+1] va` s[n-1] phai — ạ, em là newbie mong nhận được câu trả lời, em xin cảm ơn
cho e hỏi tại sao đến đoạn s[n-1]=’\0′ lại kết thúc ạ?