Chuỗi ký tự là trường hợp đặc biệt của mảng 1 chiều, là một dãy các phần tử, mỗi phần tử có kiểu ký tự
Hằng ký tự được đặt trong cặp nháy đơn. Ví dụ: ‘a’, ‘1’, ‘ ’
35 trang |
Chia sẻ: Mr Hưng | Lượt xem: 1023 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Kĩ thuật lập trình - Chương 4: Xử lý chuỗi ký tự, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TRẦN MINH THÁIEmail: minhthai@itc.edu.vnWebsite: www.minhthai.edu.vn Cập nhật: 08 tháng 04 năm 2015Chương 4. Xử lý chuỗi ký tựNội dungKhái niệmKhai báoCác hàm xử lý chuỗiBài tậpKhái niệmChuỗi ký tự là trường hợp đặc biệt của mảng 1 chiều, là một dãy các phần tử, mỗi phần tử có kiểu ký tự Hằng ký tự được đặt trong cặp nháy đơn. Ví dụ: ‘a’, ‘1’, ‘ ’Hằng chuỗi được đặt trong cặp nháy kép. Ví dụ: “ho va ten”, “123”, “”3Khái niệmChuỗi ký tự được kết thúc bằng ký tự ‘\0’ (giá trị 0). Do đó khi khai báo độ dài của chuỗi luôn luôn khai báo dư 1 phần tử để chứa ký tự ‘\0’.Ví dụ: Chuỗi “NGUYEN VAN A” được lưu Chuỗi gồm 13 ký tự4‘N’‘G’‘U’‘Y’‘E’‘N’‘ ‘‘V’‘A’‘N’‘ ‘‘A’‘\0’0123456789101112Khai báo chuỗiCách 1: Con trỏ hằng char [] ; Ví dụ: char str[25]; Ý nghĩa khai báo 1 mảng kiểu ký tự tên là str có 25 phần tử (như vậy có thể lưu tối đa 24 ký tự vì phần tử thứ 25 đã chứa ký tự kết thúc chuỗi ‘\0’ ) Khái niệmCách 2: Con trỏ char *; Ví dụ: char *str; Phải cấp phát bộ nhớ trước khi sử dụng chuỗi strVí dụ: char *str;str = (char*)malloc(30); //Cấp phát bộ nhớ cho str gồm 30 ký tự Nhập chuỗiCú pháp: char *gets(char *str);Nhận các ký tự nhập từ phím cho đến khi nhấn phím Enter và đưa vào chuỗi strVí dụ:void main(){char str[80];printf("Nhap vao chuoi: ");gets(str);printf("Chuoi vua nhap la: %s\n", str);}Nhập chuỗiLưu ý: Không thể dùng hàm scanf để nhập chuỗi có khoảng trắngVí dụ:void main(){char str[80];printf("Nhap vao chuoi: ");scanf(“%s”, &str);printf("Chuoi vua nhap la: %s\n", str);}Giả sử nhập vào chuỗi: “Nguyen Van An”Thì kết quả xuất ra màn hình là: “Nguyen” (do str chỉ lưu chuỗi “Nguyen”)Xuất chuỗiCú pháp : int puts (const char *s);Ví dụ:void main(){ char *str = "Vi du xuat chuoi"; puts(str);} Có thể dùng printf() với định dạng “%s”Các hàm xử lý chuỗi - Tính độ dài chuỗi: strlenSao chép chuỗi: strcpy, strncpyNối chuỗi: strcat, strncatSo sánh chuỗi: strcmp, strncmp, stricmp, strnicmpTìm kiếm: strchr, strstrTách chuỗi: strtokĐổi thành chữ in HOA: struprĐổi thành chữ in thường: strlwrTính độ dài của chuỗi int strlen(char s[]); Ví dụ:char *str = "Borland International";printf("Do dai str = %d\n", strlen(str)); Kết quả: Do dai str = 21Bài tập ví dụ - tính độ dài chuỗiViết hàm đếm số ký tự trắng trong chuỗiViết hàm in ra màn hình chuỗi theo thứ tự đảo ngượcViết hàm tìm xem ký tự ch có trong chuỗi không? Nếu có cho biết vị trí xuất hiện đầu tiên của chViết hàm kiểm tra xem chuỗi có đối xứng hay không?Bài tập làm thêm – tính độ dài chuỗiViết hàm tra xem trong chuỗi có ký tự số hay không nếu có tách ra thành một mảng số riêng Viết chương trình tìm kiếm xem ký tự nào xuất hiện nhiều nhất trong chuỗiSao chép chuỗiSao chép nội dung chuỗi scr vào chuỗi dest strcpy(char dest[], char scr[]); Ví dụ:char dest[10];char *src = "abcdefghi";strcpy(dest, src);printf("%s", dest); Kết quả: abcdefghi14Sao chép chuỗiChép n ký tự từ chuỗi scr sang chuỗi dest. Nếu chiều dài scr 0: nếu s1 lớn hơn s2 0!!! Ký tự HOA < Ký tự thườngVD: ‘A’ < ‘a’ (do mã Ascii ‘A’ = 65, mã Ascii ‘a’ = 97)So sánh chuỗiVí dụ:char *s1 = “abcd”;char *s2 = "abCD";if(strcmp(s1, s2)==0) printf("Giong nhau");else printf(“Khac nhau”); Kết quả: Khac nhauSo sánh chuỗiSo sánh n ký tự đầu tiên của s1 và s2, giá trị trả về tương tự hàm strcmp() int strncmp(char s1[],char s2[], int n);Ví dụ:char *s1 = “abcd”;char *s2 = "abef";if(strncmp(s1, s2, 2)==0) printf("Giong nhau");else printf(“Khac nhau”); Kết quả: Giong nhauSo sánh chuỗiSo sánh chuỗi s1 và s2 nhưng không phân biệt hoa thường, giá trị trả về tương tự hàm strcmp() int stricmp(char s1[],char s2[]);Ví dụ:char *s1 = “abcd”;char *s2 = "abCD";if(stricmp(s1, s2)==0) printf("Giong nhau");else printf(“Khac nhau”); Kết quả: Giong nhauSo sánh chuỗiSo sánh n ký tự đầu tiên của s1 và s2, không phân biệt hoa thường, giá trị trả về tương tự hàm strcmp() int strnicmp(char s1[],char s2[], int n); Ví dụ:char *s1 = “aBcd”;char *s2 = "Abef";if(strnicmp(s1, s2, 2)==0) printf("Giong nhau");else printf(“Khac nhau”); Kết quả: Giong nhauTìm ký tự trong chuỗiTìm sự xuất hiện đầu tiên của ký tư c trong chuỗi s. char *strchr(char s[], char c); Trả về:NULL: nếu không cóĐịa chỉ c: nếu tìm thấy Tìm ký tự trong chuỗiVí dụ:char s[15];char *ptr, c = 'm';strcpy(s, "Vi du tim ky tu");ptr = strchr(s, c);if (ptr) printf("Ky tu %c xuat hien tai: %d", c, ptr-s);else printf("Khong tim thay"); Kết quả: Ky tu m xuat hien tai: 8Tìm chuỗi conTìm sự xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1. char *strstr(char s1[], char s2[]); Trả về:NULL: nếu không cóNgược lại: Địa chỉ bắt đầu chuỗi s2 trong s1 Tìm chuỗi conVí dụ:char *s1 = "Borland International"; char *s2 = "nation", *ptr;ptr = strstr(s1, s2);printf("Chuoi con: %s\n", ptr); Kết quả: Chuoi con: nationalTách chuỗiTách chuỗi: char *strtok(char s1[], char s2[]); Nếu s2 có xuất hiện trong s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu là những ký tự cho đến khi gặp chuỗi s2 đầu tiên, chuỗi sau là những ký tự còn lại của s1 sau khi đã bỏ đi chuỗi s2 xuất hiện trong s1.Nếu s2 không xuất hiện trong s1 thì kết quả chuỗi tách vẫn là s1. Tách chuỗiVí dụ:char input[16] = "abc,d";char *p;// Lay chuoi daup = strtok(input, ",");if (p) printf("S11 = %s\n", p);/*Lay chuoi con lai, tham so dau la NULL*/p = strtok(NULL, ",");if (p) printf("S12 = %s", p); Kết quả: S11 = abc S12 = dĐổi sang chữ in HOAĐổi chuỗi str thành chuỗi in HOA char* strupr(char str[]); Ví dụ:char *s1 = “aBcd”;char *s2 = strupr(s1);printf(“s2 = %s“, s2); Kết quả: ABCDĐổi sang chữ in thườngĐổi chuỗi str thành chuỗi in thường char* strlwr(char str[]); Ví dụ:char *s1 = “aBcd”;char *s2 = strlwr(s1);printf(“s2 = %s“, s2); Kết quả: abcdBÀI TẬPViết chương trình tìm kiếm 1 ký tự xem có trong chuỗi hay không, nếu có xuất ra vị trí của từ đó.Viết chương trình tìm kiếm 1 chuỗi xem có trong chuỗi hay không, nếu có xuất ra vị trí của xuất hiện của chuỗi đó.Đếm số từ có trong chuỗi (từ cách nhau bởi khoảng trắng)Viết hàm kiểm tra xem chuỗi có tuần hoàn hay không?Viết hàm đảo vị trí của từ đầu và từ cuối. Ví dụ: nhập “bo an co” xuat ra “co an bo”34Q&A
Các file đính kèm theo tài liệu này:
- _chuong4_xulychuoikytu_234.pptx