LTC- Xâu kí tự
Trang 1Biên soạn: TS Ngô Hữu Phúc
Bộ môn Khoa học máy tính Học viện Kỹ thuật quân sự
Xâu ký tự
CHƯƠNG 8
Trang 2Nội dung bài học
Trang 38.1 Các biến và hằng kiểu xâu kí tự.
Trong C, xâu ký tự được cài đặt như là mảng của các ký tự , được kết thúc bởi ký tự NULL (‘\0’).
Các biến xâu kí tự được sử dụng để lưu trữ một dãy các ký tự
Như các biến khác, các biến này phải được khai báo trước khi sử dụng
Ví dụ khai báo một biến xâu kí tự:
char str[10];
str là một mảng các ký tự, nó có thể lưu tối đa 10 ký tự
Giả sử str được gán một hằng xâu kí tự: “WELL DONE”
Một hằng xâu kí tự là một dãy các ký tự nằm trong dấu nháy kép Mỗi ký
tự trong một xâu kí tự được lưu trữ như là một phần tử của mảng
Trang 48.1 Các biến và hằng kiểu xâu kí tự (t)
Trong bộ nhớ, xâu kí tự được lưu trữ như sau:
Đối với kiểu hằng hoặc thông qua lệnh nhập, ký tự ‘\0’ (null) được tự động thêm vào trong cách biểu diễn bên trong của xâu kí tự để đánh dấu điểm kết thúc xâu kí tự
Do đó, khi khai báo một xâu kí tự, phải tăng kích thước của xâu thêm một phần tử để chứa kí hiệu kết thúc NULL.
Trang 5 pstr là một con trỏ được khởi tạo để trỏ đến một hằng xâu kí tự
Con trỏ pa lưu địa chỉ của xâu a.
Các con trỏ trên có thể thay đổi để trỏ đến bất kì một xâu kí tự nào khác.
Trang 68.1.2 Các thao tác nhập xuất xâu kí tự
Các thao tác nhập/xuất xâu kí tự trong C được thực hiện
bằng cách gọi các hàm chuẩn
Các hàm chuẩn được khai báo trong:
#include <stdio.h>;
Một số hàm chuẩn cho xâu ký tự:
Hàm char * gets (char *s);
Hàm int puts (const char *s);
Hàm scanf() với định dạng xâu ký tự.
Hàm printf() với định dạng xâu ký tự.
Trang 78.1.2 1 Các thao tác nhập/xuất xâu kí tự đơn giản
Nhập đơn giản:
Hàm được sử dụng gets().
Cú pháp: char * gets (char *s);
Ý nghĩa:
Nhập một xâu ký tự thông qua thiết bị nhập chuẩn
Các ký tự sẽ được nhập vào cho đến khi nhấn phím Enter
Hàm gets() thay thế ký tự kết thúc trở về đầu dòng ‘\n’ bằng ký tự ‘\0’
Trong đó s là một mảng ký tự đã được khai báo.
Chú ý: Cần giải phóng bộ đệm khi nhập xâu ký tự bằng hàm: fflush(stdin).
Xuất đơn giản:
Hàm được sử dụng: puts().
Cú pháp: int puts (const char *s);
Ý nghĩa:
Hiển thị một xâu kí tự ra thiết bị xuất chuẩn
Trong đó s là một mảng ký tự đã được khai báo và khởi tạo.
Trang 8Ví dụ:
Nhập xâu
kí tự và hiển thị lên màn hình
Nguyen Van A
Trang 98.1.2 2 Các thao tác Nhập/Xuất xâu kí tự có định dạng
Vì hàm này là hàm tổng hợp, khi nhập xâu ký tự, không nhập dấu cách
Định dạng %s cho biết rằng một giá trị xâu ký tự sẽ được nhập vào,
str là một mảng ký tự đã được khai báo
Xuất có định dạng:
Sử dụng hàm: printf(…);
Cú pháp: printf(“%s”,str);
Ý nghĩa:
Hiện một xâu ký tự lên màn hình
Định dạng %s cho biết rằng một giá trị xâu kí tự sẽ được hiển thị
str là một mảng ký tự đã được khai báo và khởi tạo
Trang 10Ví dụ về
sử dụng hàm
scanf
và printf với xâu
Trang 118.2 Các hàm xử lý xâu kí tự
Trong C, hỗ trợ rất nhiều hàm về xâu kí tự
Các hàm này được định nghĩa trong thư viện string.h
Một số thao tác mà các hàm này thực hiện là:
Nối xâu kí tự.
So sánh xâu kí tự.
Định vị một ký tự trong xâu kí tự.
Sao chép một xâu kí tự sang xâu kí tự khác.
Xác định chiều dài của xâu kí tự.
…
Trang 12 2 xâu dest và src đã được khai báo và khởi tạo.
Hàm này sẽ thực hiện nối xâu kí tự scr vào sau xâu kí tự
dest
Hàm này cũng trả về con trỏ tới xâu đã nối.
Trang 13Ví dụ
về nối xâu
NguyenAnh // xâu kết quả
Trang 14 Hàm này so sánh 2 xâu ký tự và trả về số nguyên là kết quả so sánh.
2 xâu s1 và s2 đã được khai báo và khởi tạo
Giá trị trả về có nghĩa:
trả về giá trị nhỏ hơn 0, s1<s2.
trả về 0, s1=s2.
trả về lớn hơn 0, s1>s2.
Trang 15Ví dụ về
sử dụng strcmp
char name1[20] = "Nguyen Van A";
char name2[20] = "Tran Van B";
char name3[20] = "Le Van C";
char name4[20] = "Nguyen Van A";
int i;
i = strcmp(name1,name2);
printf("%s so sanh voi %s , tra
ve %d\n", name1, name2, i);
i=strcmp(name1, name3);
printf("%s so sanh voi %s , tra
ve %d\n", name1, name3, i);
i=strcmp(name1,name4);
printf("%s so sanh voi %s , tra
ve %d\n", name1, name4, i);
Trang 16Hàm strchr() xác định vị trí xuất hiện của một ký tự trong một xâu kí tự
Trong đó str là một mảng ký tự hay con trỏ kí tự
chr là một biến int chứa mã ASCII của ký tự cần tìm
Hàm trả về con trỏ trỏ đến giá trị tìm được đầu tiên trong xâu kí tự, hoặc NULL
nếu không tìm thấy
Trang 17Ví dụ:
Chương trình sau đây xác định liệu ký tự
hiện trong tên hai thành phố hay không?
char str1[15] = "Ho Chi Minh";
char str2[15] = "Ha Noi";
char chr = 'a', *location;
Trang 188.2.4 Copy xâu ký tự
được phép gán để sao chép giá trị giữa 2 xâu.
Cú pháp:
char * strcpy(char *dest, const char *src);
Hàm sao chép giá trị scr vào dest và trả về xâu kí tự dest.
dest và scr là hai mảng ký tự đã được khai báo và khởi tạo
Trang 19char hotelname1[15] = "Hoa Hong";
char hotelname2[15] = "Hoa Mai";
printf("Ten cu cua khach san: %s\n", hotelname1);
Trang 20 Hàm xác định độ dài xâu ký tự str, không kể ‘\0’
Trong đó str là mảng ký tự đã được khai báo và khởi tạo.
Trang 21Ví dụ
sử dụng strlen
getch();
}
Trang 228.2.6 Một số hàm thường dùng khác trong thư
viện string.h
được thực hiện từ trái sang phải), nếu không trả về NULL
ch trong s (việc tìm được thực hiện từ phải sang trái), nếu không trả về NULL.
dương nếu s1 > s2
s1 == s2, dương nếu s1 > s2, so sánh trên n ký tự.
thường
Trang 238.2.6 Một số hàm thường dùng khác trong thư viện string.h (t)
int strcspn(char* s1, char* s2) : trả về độ dài đoạn đầu tiên lớn nhất cúa s1 mà mọi kí tự của đoạn không có mặt trong chuỗi s2.
int strspn(char* s1, char* s2): trả về độ dài đoạn đầu tiên dài
nhất mà hai xâu s1 và s2 giống nhau.
char* strdup(char* s): cấp phát vùng nhớ gấp đôi chuỗi s, nếu không được trả về NULL
int stricmp(char* s1, char* s2): giống strcmpi.
int strlen(char* s): trả về độ dài xâu.
char* strlwr(char* s): chuyển chữ hoa thành chữ thường
char* strncat(char* s1, char* s2, int n): ghép n kí tự đầu của chuỗi s2 vào chuỗi s1.
Trang 248.2.6 Một số hàm thường dùng khác trong thư viện string.h (t)
s1, nếu không trả về NULL
không trả về NULL
Trang 25Ví dụ
Nhập vào một xâu ký
tự Tách xâu này thành các từ, ngăn cách với nhau bởi dấu
“Nguyen “ Van
“Nguyen “ Nam
Trang 26Ví dụ:
Nhập vào n tên người, đưa ra những người họ nguyễn