LTC- Xâu kí tự
Biên soạn: TS Ngô Hữu PhúcBiên soạn: TS Ngô Hữu PhúcBộ môn Khoa học máy tínhBộ môn Khoa học máy tínhHọc viện Kỹ thuật quân sựHọc viện Kỹ thuật quân sựXâu ký tựXâu ký tự1Chương 8: Xâu ký tựCHƯƠNG 8CHƯƠNG 8 Nội dung bài họcNội dung bài họcChương 8: Xâu ký tự21. Các loại biến, hằng xâu ký tự.2. Các hàm cơ bản trong xâu ký tự.3. Một số ví dụ minh họa. 8.1. Các biến và hằng kiểu xâu kí tự.8.1. Các biến và hằng kiểu xâu kí tự.Chương 8: Xâu ký tự3Trong 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. 8.1. Các biến và hằng kiểu xâu kí tự (t)8.1. Các biến và hằng kiểu xâu kí tự (t)Chương 8: Xâu ký tự4Trong 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.‘W’ ‘E’ ‘L’ ‘L’ ‘ ’ ‘D’ ‘O’ ‘N’ ‘E’ ‘\0’ 8.1.1. Con trỏ trỏ đến xâu kí tự8.1.1. Con trỏ trỏ đến xâu kí tựChương 8: Xâu ký tự5Xâu kí tự có thể được lưu và truy cập bằng cách sử dụng con trỏ kiểu ký tự. Một con trỏ kiểu ký tự trỏ đến một xâu ký tự được khai báo như sau: char *pstr = “WELCOME”;hoặc:char a[] = “Welcome”;char *pa=a;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. 8.1.2 Các thao tác nhập xuất xâu kí tự8.1.2 Các thao tác nhập xuất xâu kí tựChương 8: Xâu ký tự6Cá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ự. 8.1.2 .1. Các thao tác nhập/xuất xâu kí tự đơn giản8.1.2 .1. Các thao tác nhập/xuất xâu kí tự đơn giảnChương 8: Xâu ký tự7Nhậ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. Ví dụ: Ví dụ: Nhập xâu Nhập xâu kí tự và kí tự và hiển thị hiển thị lên màn lên màn hìnhhìnhChương 8: Xâu ký tự8#include "stdio.h"#include "conio.h"void main(){char name[20];puts("Nhap ten:");gets(name); puts("Xin chao: ");puts(name); getch();}Kết quả khi chạy chương trình:Nhap ten:Nguyen Van AXin chao:Nguyen Van A 8.1.2 .2. Các thao tác Nhập/Xuất xâu kí tự có định dạng8.1.2 .2. Các thao tác Nhập/Xuất xâu kí tự có định dạngChương 8: Xâu ký tự9Nhập có định dạng:Sử dụng hàm: scanf(…).Cú pháp: scanf(“%s”, str);Ý nghĩa: Sử dụng để nhập một xâu ký tự. 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. Ví dụ về Ví dụ về sử dụng sử dụng hàm hàm scanf scanf và printf và printf với xâu với xâu ký tựký tựChương 8: Xâu ký tự10#include "stdio.h"#include "conio.h"void main(){char name[20];printf("Nhap ten:");scanf("%s",name); printf("Xin chao: ");printf("%s",name);getch();}Kết quả:14. Trường hợp 1:Nhap ten: Nguyen Van AXin chao: Nguyen17. Trường hợp 2:Nhap ten: NguyenVanAXin chao: NguyenVanA [...]... 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ự … 11 Chương 8: Xâu ký tự 8.2.1 Hàm nối xâu ký tự Để nối 2 xâu ký tự có thể dùng... Chương 8: Xâu ký tự Giải thích: Xâu 1 nhỏ xâu 2, kết quả -1 Xâu 1 lớn hơn xâu 3, kết quả 1 Xâu 1 bằng xâu 4, kết quả 0 Ví dụ về sử dụng strcmp 8.2.3 Xác định vị trí ký tự Để tìm ký tự đầu tiên xuất hiện trong xâu ký tự có thể dùng hàm: strchr(…) Cú pháp: char * strchr(const char *str, int chr); Ý nghĩa: Hà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... char* s2, int n): so sánh n kí tự đầu tiên của 2 xâu int strnicmp(char* s1, char* s2, int n): tương tự trên, không phân biệt hoa, thường char* strncpy(char* s1, char* s2, int n): sao n kí tự đầu tiên của s2 sang s1 char* strnset(char* s, int c, int n): gán n lần kí tự c cho xâu s char* strpbrk(char* s1, char* s2): trả về kí tự đầu tiên trong xâu s2 có xuất hiện trong xâu s1, nếu không trả về NULL... 8: Xâu ký tự K t quả: ế a khong co trong H Chi M o inh a co trong H N a N a oi, oi 8.2.4 Copy xâu ký tự Khi làm việc với xâu ký tự (mảng ký tự) , không sử dụng được phép gán để sao chép giá trị giữa 2 xâu Để copy, có thể dùng hàm strcpy(…) Cú pháp: char * strcpy(char *dest, const char *src); Ý nghĩa: 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ự. .. *src); Ý nghĩa: 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 12 Chương 8: Xâu ký tự #include "stdio.h" Giải thích: #include "conio.h" 1 Trường hợp 1: #include "string.h" Nhap ho: Nguyen void main() Nhap ten: Anh { NguyenAnh // xâu đích char ho[10]; char ten[10]; NguyenAnh // xâu kết quả 2 Trường... "); Nhap ten: Anh scanf("%s", ho); NguyenVanAnh // xâu đích printf("Nhap ten:"); NguyenVanAnh // xâu kết quả scanf("%s", ten); hoten=strcat(ho, ten); printf("%s\n", ho); printf("%s\n", hoten); getch(); } 13 Chương 8: Xâu ký tự sau đó báo lỗi, vì xâu đích không đủ bộ nhớ để lưu Ví dụ về nối xâu ký tự 8.2.2 Hàm so sánh xâu ký tự Để so sánh 2 xâu ký tự, có thể dùng hàm strcmp(…) Cú pháp: int strcmp(const... 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 16 Chương 8: Xâu ký tự #include "stdio.h" Ví dụ: Chương trình sau đây xác định liệu ký tự ‘a’ có xuất hiện trong tên hai thành phố hay không? #include "conio.h"... char* strrev(char* s): đảo ngược chuỗi kí tự char* strset(char* s, int kt): tạo xâu s toàn kí tự kt char* strstr(char* s1, char* s2): trả về địa chỉ của xâu con trong s2 trùng với xâu s1, nếu không trả về NULL char* strupr(char* s): chuyển chữ thường thành chữ hoa char * strtok(char *s1, const char *s2); chia cắt xâu s1 theo dấu hiệu s2 24 Chương 8: Xâu ký tự #include Kết quả: #include... Xâu ký tự Ví dụ về hàm strcpy #include "stdio.h" #include "conio.h" #include "string.h" void main() { char hotelname1[15] = "Hoa Hong"; char hotelname2[15] = "Hoa Mai"; printf("Ten cu cua khach san: %s\n", hotelname1); strcpy(hotelname1, hotelname2); printf("Ten moi cua khach san: %s\n", hotelname1); getch(); } 19 Chương 8: Xâu ký tự 8.2.5 Hàm xác định độ dài xâu ký tự Để xác định chiều dài của xâu. .. getch(); } 21 Chương 8: Xâu ký tự Ví dụ sử dụng strlen 8.2.6 Một số hàm thường dùng khác trong thư viện string.h char* strcat(char* s1, char* s2): ghép chuỗi s2 vào chuỗi s1 char* strchr(char* s, int ch): trả về địa chỉ của kí tự ch trong s (việc tìm được thực hiện từ trái sang phải), nếu không trả về NULL char* strrchr(char* s, int ch): tương tự hàm trên, trả về địa chỉ của kí tự ch trong s (việc . 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ự. … 8.2.1.. trong xâu ký tự. 3. Một số ví dụ minh họa. 8.1. Các biến và hằng kiểu xâu kí tự. 8.1. Các biến và hằng kiểu xâu kí tự. Chương 8: Xâu ký tự3 Trong C, xâu ký tự