Ở phần trước chúng ta đã học cách dùng hàm strtok() trong c để lấy ra Họ, Tên, Đệm trong chuỗi Họ tên nhập vào từ bàn phím. Trong bài viết này, chúng ta sẽ tìm hiểu về cách dùng biến con trỏ và ký tự null(\0’) để lấy ra Họ, Tên, Đệm.
- Khai báo 1 mảng để minh họa
Giả sử ta có chuỗi sau
char a[ ] = “ HO VA TEN “;
char *ptr = a;
Và giả sử đã cắt các khoảng trắng thừa chuỗi( tham khảo bài Xóa các khoảng trắng thừa trong chuỗi)
2. Lấy Tên trong chuỗi
Dùng hàm strrchr(a, ‘ ‘) để tìm khoảng trắng cuối cùng trong chuỗi
Gán ký địa chỉ của ký tự kế tiếp sau ký tự trắng’\0’ vào nội dung con trỏ
3. Lấy Họ trong chuỗi
Dùng hàm Strchr (a,’ ‘) để tìm khoảng trắng đầu tiên
Gán ký tự ‘\0’ cho khảng trắng này
4. Lấy Họ Đệm trong chuỗi
Dùng srtchr(a,’ ‘) để tìm khoảng trắng đầu tiên
Gán địa chỉ của ký tự kế tiếp cho con trỏ
Dùng strrchr(a,’ ‘) để tìm khaongr trắng cuối cùng
Gán ký tự ‘\0’ cho khoảng trắng này
5. Code chương trình
- #include <stdio.h>
- #include <string.h>
- char a[50];
- char *ptr = a;
- void NhapChuoi()
- {
- printf(“Nhap chuoi: “);
- gets(a);
- puts(“Chuoi vua nhap”);
- puts(ptr);
- }
- void XoaKhoangTrangDauChuoi()
- {
- puts(“Loai bo khoang trang dau chuoi”);
- int i = 0;
- while (a[i] == ‘ ‘)
- i++;
- ptr = &a[i];
- strcpy(a, ptr); // Gán chuỗi đã loại bỏ khoảng trắng đầu vào chuỗi ban đầu
- puts(a);
- }
- void XoaKhoangTrangCuoiChuoi()
- {
- puts(“Loai bo khoang trang cuoi chuoi”);
- int i = strlen(a) – 1;
- while (a[i] == ‘ ‘)
- i–;
- a[i + 1] = ‘\0‘;
- puts(a);
- }
- void XoaKhoangTrangThuaTrongChuoi()
- {
- puts(“Loai bo khoang trang thua giua cac tu”);
- //(giữa các từ chỉ cách nhau 1 khoảng trắng)
- for (int i = 0; a[i] != ‘\0‘; i++)
- {
- if (a[i] == ‘ ‘ && a[i + 1] == ‘ ‘)
- {
- for (int j = i + 1; a[j] != ‘\0‘; j++)
- {
- a[j] = a[j + 1]; // dịch sang trái
- }
- i–;
- }
- }
- puts(a);
- }
- void LayHoTrongHoVaTen()
- {
- char b[50];
- strcpy(b, a);
- ptr = b;
- int i = strchr(b, ‘ ‘) – b;
- b[i] = ‘\0‘;
- printf(“Ho: “);
- puts(ptr);
- }
- void LayTenTrongHoVaTen()
- {
- char b[50];
- strcpy(b, a);
- ptr = b;
- int i = strrchr(b, ‘ ‘) – b;
- ptr = &b[i + 1];
- printf(“Ten: “);
- puts(ptr);
- }
- void LayHoLotTrongHoVaTen()
- {
- char b[50];
- strcpy(b, a);
- int i = strchr(b, ‘ ‘) – b;
- int j = strrchr(b, ‘ ‘) – b;
- if (i == j)
- printf(“Lot: Khong co”);
- else
- {
- while (b[i] == ‘ ‘)
- i++;
- ptr = &b[i];
- while (b[j] == ‘ ‘)
- j–;
- b[j + 1] = ‘\0‘;
- printf(“Lot: “);
- puts(ptr);
- }
- }
- main()
- {
- NhapChuoi();
- XoaKhoangTrangDauChuoi();
- XoaKhoangTrangCuoiChuoi();
XoaKhoangTrangThuaTrongChuoi();
LayHoTrongHoVaTen();
LayTenTrongHoVaTen();
LayHoLotTrongHoVaTen();
}
Qua bài viết này, hy vọng sinh viên đã có được cái nhìn tổng quát về cách dùng con trỏ và ký tự Null trong ngôn ngữ C.
Giảng viên Bùi Tuấn Vũ
Bộ môn Ứng dụng phần mềm
FPT Polytechnic TP HCM