Bài giảng Nhập môn lập trình - Chủ đề 5: Kiểu dữ liệu mảng, chuỗi - Phần 3: Chuỗi kí tự
Bạn đang xem tài liệu "Bài giảng Nhập môn lập trình - Chủ đề 5: Kiểu dữ liệu mảng, chuỗi - Phần 3: Chuỗi kí tự", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_nhap_mon_lap_trinh_chu_de_5_kieu_du_lieu_mang_chuo.pdf
Nội dung text: Bài giảng Nhập môn lập trình - Chủ đề 5: Kiểu dữ liệu mảng, chuỗi - Phần 3: Chuỗi kí tự
- NHẬP MÔN LẬP TRÌNH CHUỖI KÝ TỰ 1
- Nội dung 1 Khái niệm 2 Khởitạo 3 Các thao tác trên chuỗikýtự 4 Bài tập Chuỗikýtự 2
- Khái niệm Khái niệm Kiểu char chỉ chứa được mộtkýtự. Để lưu trữ mộtchuỗi (nhiềukýtự) ta sử dụng mảng (mộtchiều) cáckýtự. Chuỗikýtự kếtthúcbằng ký tự ‘\0’ (null) Î Độ dài chuỗi = kích thước mảng–1 Ví dụ char hoten[30]; // Dài 29 ký tự char ngaysinh[9]; // Dài 8 ký tự Chuỗikýtự 3
- Khởitạo Khởitạonhư mảng thông thường Độ dài cụ thể char s[10] = {‘T’, ‘H’, ‘C’, ‘S’, ‘ ’, ‘A’, ‘\0’}; char s[10] = “THCS A”; // Tựđộng thêm ‘\0’ 0123456789 ‘T’ ‘H’ ‘C’ ‘S’ ‘’‘A’‘\0’ Tự xác định độ dài char s[] = {‘T’, ‘H’, ‘C’, ‘S’, ‘ ’, ‘A’, ‘\0’}; char s[] = “THCS A”; // Tựđộng thêm ‘\0’ 0123456 ‘T’ ‘H’ ‘C’ ‘S’ ‘’‘A’‘\0’ Chuỗikýtự 4
- Xuấtchuỗi Sử dụng hàm printf với đặc tả “%s” char monhoc[50] = “Tin hoc co so A”; printf(“%s”, monhoc); // Không xuống dòng Tin hoc co so A_ Sử dụng hàm puts char monhoc[50] = “Tin hoc co so A”; puts(monhoc); // Tựđộng xuống dòng Ù printf(“%s\n”, monhoc); Tin hoc co so A _ Chuỗikýtự 5
- Nhậpchuỗi Sử dụng hàm scanf với đặc tả “%s” Chỉ nhậncáckýtự từ bàn phím đến khi gặp ký tự khoảng trắng hoặckýtự xuống dòng. Chuỗinhận được không bao gồmkýtự khoảng trắng và xuống dòng. char monhoc[50]; printf(“Nhap mot chuoi: ”); scanf(“%s”, monhoc); printf(“Chuoi nhan duoc la: %s”, monhoc); Nhap mot chuoi: Tin hoc co so A Chuoi nhan duoc la: Tin_ Chuỗikýtự 6
- Nhậpchuỗi Sử dụng hàm gets Nhậncáckýtự từ bàn phím đến khi gặpkýtự xuống dòng. Chuỗinhận được là những gì người dùng nhập(trừ ký tự xuống dòng). char monhoc[50]; printf(“Nhap mot chuoi: ”); gets(monhoc); printf(“Chuoi nhan duoc la: %s”, monhoc); Nhap mot chuoi: Tin hoc co so A Chuoi nhan duoc la: Tin hoc co so A _ Chuỗikýtự 7
- Mộtsố hàm thao tác trên chuỗi Thuộcthư viện strlen strcpy strdup strlwr/strupr strrev strcmp/stricmp strcat strstr Chuỗikýtự 8
- Hàm tính độ dài chuỗi size_t strlenstrlen(const(const char *s)*s) Tính độ dài chuỗi s. size_t thay cho unsigned (trong ) dùng để đo các đại lượng không dấu. Độ dài chuỗi s (không tính ký tự kết thúc) char s[] = “Visual C++ 6.0”; int len = strlen(s); // => 14 Chuỗikýtự 9
- Hàm sao chép chuỗi char *strcpy(char*strcpy(char *dest,*dest, const char *ssrcrc)) Sao chép chuỗi src sang chuỗi dest, dừng khi ký tự kết thúc chuỗi ‘\0’ vừa được chép. ! dest phải đủ lớn để chứasrc Con trỏ dest. char s[100]; s = “Visual C++ 6.0”; // sai strcpy(s, “Visual C++ 6.0”); // đúng Chuỗikýtự 10
- Hàm tạobảnsao char *strdup(const*strdup(const ccharhar *s)*s) Tạobảnsaocủamộtchuỗi s cho trước. Hàm sẽ tự tạovùngnhớ dài strlen(s) + 1 (bytes) để chứachuỗi s. Phảitự hủy vùng nhớ này khi không sử dụng nữa. Thành công: trả về con trỏđếnvùngnhớ chứachuỗibảnsao. Thấtbại: trả về NULL. char *s; s = strdup(“Visual C++ 6.0”); Chuỗikýtự 11
- Hàm chuyểnthànhchuỗithường char *strlwr(char*strlwr(char *s)*s) Chuyểnchuỗi s thành chuỗithường (‘A’ thành ‘a’, ‘B’ thành ‘b’, , ‘Z’ thành ‘z’) Con trỏđếnchuỗi s. char s[] = “Visual C++ 6.0”; strlwr(s); puts(s); // visual c++ 6.0 Chuỗikýtự 12
- Hàm chuyểnthànhchuỗiIN char *stru*struprpr(c(chharar *s)*s) Chuyểnchuỗi s thành chuỗiIN (‘a’thành ‘A’, ‘b’ thành ‘B’, , ‘z’ thành ‘Z’) Con trỏđếnchuỗi s. char s[] = “Visual C++ 6.0”; strupr(s); puts(s); // VISUAL C++ 6.0 Chuỗikýtự 13
- Hàm đảo ngược chuỗi char *strrev(char*strrev(char *s)*s) Đảongược thứ tự các ký tự trong chuỗi s (trừ ký tự kết thúc chuỗi). Con trỏđếnchuỗikếtquả. char s[] = “Visual C++ 6.0”; strrev(s); puts(s); // 0.6 ++C lausiV Chuỗikýtự 14
- Hàm so sánh hai chuỗi int sstrcmptrcmp(const(const ccharhar *s1,*s1, const char *s2s2) So sánh hai chuỗi s1 và s2 (phân biệthoa thường). 0 nếus1 > s2 char s1[] = “visual C++ 6.0”; char s2[] = “Visual C++ 6.0”; int kq = strcmp(s1, s2); // => kq > 0 Chuỗikýtự 15
- Hàm so sánh hai chuỗi int sstricmptricmp(const(const char *s1,*s1, const char *s2s2) So sánh hai chuỗi s1 và s2 (không phân biệt hoa thường). 0 nếus1 > s2 char s1[] = “visual c++ 6.0”; char s2[] = “VISUAL C++ 6.0”; int kq = stricmp(s1, s2);// => kq == 0 Chuỗikýtự 16
- Hàm nốihaichuỗi char* strcatstrcat(char(char *dest,dest, const char *src)*src) Nốichuỗi src vào sau chuỗi dest. ! Chuỗidestphải đủ chứakếtquả Con trỏđếnchuỗi được nối. char s1[100] = “Visual C++”; char s2[] = “6.0”; strcat(s1, “ ”); // => “Visual C++ ” strcat(s1, s2); // => “Visual C++ 6.0” Chuỗikýtự 17
- Hàm tìm chuỗi trong chuỗi char* strstr(constrstr(constst char *s1,*s1, const char *s2)*s2) Tìm vị trí xuấthiện đầu tiên của s2 trong s1 Thành công: trả về con trỏđến vị trí xuất hiện đầu tiên của s2 trong s1. Thấtbại: trả về null. char s1[] = “Visual C++ 6.0”; char s2[] = “C++”; if (strstr(s1, s2) != null) printf(“Tim thay s2 trong s1 ”); Chuỗikýtự 18
- Bài tập Bài 1: Xem thêm mộtsố hàm khác như: atoi, atol, atof : đổi chuỗi thành số. itoa, ltoa, ultoa: đổi số thành chuỗi. strtok Bài 2: Viết hàm nhậnvàomộtchuỗivàtrả về chuỗitương ứng (giữ nguyên chuỗi đầuvào): Các ký tự thành ký tự thường (giống strlwr). Các ký tự thành ký tự hoa (giống strupr). Các ký tựđầu tiên mỗitừ thành ký tự hoa. Chuẩn hóa chuỗi(xóakhoảng trắng thừa). Chuỗikýtự 19
- Bài tập Bài 3: Viết hàm nhậnvàomộtchuỗis vàtrả về chuỗitương ứng sau khi xóa các khoảng trắng. Bài 4: Viết hàm nhậnvàomộtchuỗis vàđếm xem có bao nhiêu từ trong chuỗi đó. Bài 5: Viết hàm nhậnvàomộtchuỗis vàxuất các từ trên các dòng liên tiếp. Bài 6: Viếthàmtìmtừ có chiều dài lớnnhấtvà xuất ra màn hình từđóvàđộ dài tương ứng. Bài 7: Viết hàm trích ra n ký tựđầu tiên/cuối cùng/bắt đầu tạivị trí pos củachuỗis chotrước. Chuỗikýtự 20