Yêu cầu: Xóa bỏ các kí tự khoảng trắng (kí tự space và kí tự ‘\t’)
Thuật toán: Duyệt các kí tự của chuỗi.
/************************Trim space****************** * Author: vncoding * Date : 22/12/2015 * Modify: vncoding ***************************************************************/ #include <stdio.h> #include <conio.h> #include <string.h> #define MAX_LENGTH 100 void TrimSpace(char *str); void main() { char str[MAX_LENGTH]; char c; printf("\nNhap chuoi khong qua 100 ki tu: "); fflush(stdin); gets(str); printf("\nChuoi '%s'", str); TrimSpace(str); printf("\nChuoi sau khi trim '%s'", str); getch(); } void TrimSpace(char *str) { char *src = str; char *des = str; while(*src != NULL) { if (*src != ' ' && *src != '\t') // space and tab { *des++ = *src; } src++; } *des = 0; }
Kết quả:
Giải thích:
- Khởi tạo, con trỏ src, des trỏ tới kí tự đầu chuỗi kí tự
- Duyệt chuỗi và kiểm tra kí tự, nếu khác kí tự space và kí tự tab ‘\t’, copy kí tự vào vị trí trỏ bởi des
- Khi duyệt hết chuỗi kí tự, các kí tự không phải là khoảng trắng được dồn về bên trái. Gán *des = 0 để tách chuỗi kí tự.
Chú ý: việc loại bỏ dấu space thao tác trực tiếp và thay đổi nội dung trên vùng nhớ của str.
Ai có thể giải thích giùm mình ko . Ko hiểu lắm
Bạn không hiểu câu lệnh nào?
anh co the giai thich cho em 2 con tro trong vong lap wile duoc khong voi tai sao sau vong lap lai cho *des=0
cai cho *des=0 thi em con tam hieu nhung cach hoat dong cua vong lap do kho hieu qua
Hi anh,
Mình có add thêm phần giải thích cho logic loại bỏ khoảng trắng.
P/S: bạn viết ko dấu khó hiểu khó quá
h mới lên hn mới có unikey anh à hê hê cảm ơn anh
a oi cho em hoi cho *des++ nghia la gi vay
Hi ta dinh duc,
*des++ < => *(des++).
Trong đó,
+) des++ nghĩa là con trỏ des trỏ tới ô nhớ tiếp theo của src.
+) *(des++) nghĩa là giá trị ô nhớ tiếp theo của src.
neu viet *des = *src ;
des++;
duoc khong anh
>neu viet *des = *src ;
>des++;
>duoc khong anh
Viết thế này mới chuẩn, tường mình, dễ hiểu. Quan trọng là em control được vòng lặp while trong bài này.