Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 77 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
77
Dung lượng
3,24 MB
Nội dung
Chương 10 Mảng, trỏ xâu ký tự Học phần: LẬP TRÌNH CƠ BẢN Tài liệu tham khảo Kỹ thuật lập trình C: sở nâng cao, Phạm Văn Ất, Nhà xuất KHKT – Chương The C programming language 2nd Edition, Brian Kernighan and Dennis Ritchie, Prentice Hall Software Series – Chương The C programming language 2nd Edition, Brian Kernighan and Dennis Ritchie, Prentice Hall Software Series – Chương Nội dung Mảng chiều Mảng hai chiều Con trỏ phép toán trỏ Khai báo trỏ Phép gán trỏ Truy xuất giá trị qua trỏ Con trỏ mảng Cấp phát vùng nhớ cho trỏ Xâu ký tự Khái niệm Khởi tạo Các thao tác xâu ký tự PHẦN MẢNG MỘT CHIỀU VÀ NHIỀU CHIỀU Mảng chiều Khái niệm Khai báo Truy xuất liệu Dữ liệu kiểu mảng Khái niệm Là kiểu liệu có cấu trúc người lập trình định nghĩa Biểu diễn dãy biến có kiểu Ví dụ: dãy số ngun, dãy ký tự… Kích thước xác định khai báo không thay đổi NNLT C định khối nhớ liên tục cho biến kiểu mảng Khai báo biến mảng (tường minh) Tường minh []; [][]…[]; , …, : số lượng phần tử chiều Lưu ý Phải xác định cụ thể (hằng) khai báo Mảng nhiều chiều: = N1*N2*…*Nn Bộ nhớ sử dụng = *sizeof() Một dãy liên tục có số từ đến -1 Khai báo biến mảng (tường minh) Ví dụ int Mang1Chieu[10]; 9 Mang1Chieu int Mang2Chieu[3][4]; Mang2Chieu 10 11 Số phần tử mảng Phải xác định cụ thể số phần tử lúc khai báo, không sử dụng biến thường int n1 = 10; int a[n1]; const = thị 20;tiền intxử b[n2]; Nên sử int dụngn2chỉ lý #define để định nghĩa số phần tử mảng #define n1 10 #define n2 20 int a[n1]; int b[n1][n2]; // int a[10]; // int b[10][20]; Khởi tạo giá trị cho mảng lúc khai báo Gồm cách sau Khởi tạo giá trị cho phần tử mảng int a[4] = {2912, 1706, 1506, 1904}; a 2912 1706 1506 1904 Khởi tạo giá trị cho số phần tử đầu mảng int a[4] = {2912, 1706}; a 10 2912 1706 0 Nhập xâu ký tự Sử dụng hàm scanf với đặc tả “%s” Chỉ nhận ký tự từ bàn phím đến gặp ký tự khoảng trắng ký tự xuống dòng Xâu nhận không bao gồm ký tự khoảng trắng 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_ 63 Nhập xâu ký tự Sử dụng hàm gets Nhận ký tự từ bàn phím đến gặp ký tự xuống dòng Xâu nhận 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 _ 64 Một số hàm thao tác xâu ký tự (Tự đọc) Thuộc thư viện strcpy strdup strlwr/strupr strrev strcmp/stricmp strcat strlen strstr 65 Hàm chép xâu ký tự char *strcpy(char dest[], const char src[]) Sao chép xâu ký tự src sang xâu ký tự dest, dừng ký tự kết thúc xâu ký tự ‘\0’ vừa chép ! dest phải đủ lớn để chứa src Địa xâu ký tự dest char s[100]; s = “Tin hoc co so A”; sai strcpy(s, “Tin hoc co so A”); // 66 // Hàm tạo char *strdup(const char s[]) Tạo xâu ký tự s cho trước Hàm tự tạo vùng nhớ đủ chứa xâu ký tự s Thành công: Địa xâu ký tự kết Thất bài: null char *s; s = strdup(“Tin hoc co so A”); 67 Hàm chuyển xâu ký tự thành chữ thường char *strlwr(char *s) Chuyển xâu ký tự s thành xâu ký tự thường (‘A’ thành ‘a’, ‘B’ thành ‘b’, …, ‘Z’ thành ‘z’) Địa xâu ký tự s char s[] = “Tin hoc co so A!!!”; strlwr(s); puts(s); // tin hoc co so a!!! 68 Hàm chuyển xâu ký tự thành chữ IN char *strupr(char *s) Chuyển xâu ký tự s thành xâu ký tự in (‘a’ thành ‘A’, ‘b’ thành ‘B’, …, ‘z’ thành ‘Z’) Địa xâu ký tự s char s[] = “Tin hoc co so A!!!”; strupr(s); puts(s); // TIN HOC CO SO A!!! 69 Hàm đảo ngược xâu ký tự char *strrev(char *s) Đảo ngược thứ tự ký tự xâu ký tự (trừ ký tự kết thúc xâu ký tự) Địa xâu ký tự kết char s[] = “Tin hoc co so A!!!”; strrev(s); puts(s); // !!!A os oc coh niT 70 Hàm so sánh hai xâu ký tự int strcmp(const char *s1, const char *s2) So sánh hai xâu ký tự s1 s2 (phân biệt hoa thường) < s1 < s2 == s1 == s2 >0 s1 > s2 char s1[] = “tin hoc co so A!!!”; char s2[] = “hoc tin co so A!!!”; int kq = strcmp(s1, s2); // => kq >0 71 Hàm so sánh hai xâu ký tự int stricmp(const char *s1, const char *s2) So sánh hai xâu ký tự s1 s2 (không phân biệt hoa thường) < s1 < s2 == s1 == s2 >0 s1 > s2 char s1[] = “tin hoc co so A!!!”; char s2[] = “TIN HOC CO SO A!!!”; int kq = stricmp(s1, s2); // => kq == 72 Hàm nối hai xâu ký tự char* strcat(char *dest, const char *src) Nối xâu ký tự src vào sau xâu ký tự dest ! Xâu dest phải đủ chứa kết Địa xâu ký tự nối char s1[100] = “Tin hoc”; char s2[] = “co so A!!!”; strcat(s1, “ ”);// => “Tin hoc ” strcat(s1, s2); // => “Tin hoc co so A!!!” 73 Hàm tính độ dài xâu ký tự size_t* strlen(const char *s) Tính độ dài xâu ký tự s size_t thay cho unsigned (trong ) dùng để đo đại lượng không dấu Độ dài xâu ký tự s char s[] = “Tin hoc co so A!!!”; int len = strlen(s); // => 18 74 Hàm tìm xâu ký tự xâu ký tự char* strstr(const char *s1, const char *s2) Tìm vị trí xuất s2 s1 Thành cơng: trả trỏ đến vị trí xuất s2 s1 Thất bại: trả null char s1[] = “Tin hoc co so A!!!”; char s2[] = “hoc”; if (strstr(s1, s2) != null) printf(“Tim thay!”); 75 Bài tập Xem thêm số hàm khác atoi, atol, atof : đổi xâu ký tự thành số itoa, ltoa, ultoa: đổi số thành xâu ký tự strtok Xóa tất khoảng trắng xâu ký tự s Đếm xem có từ xâu s Xuất từ dòng liên tiếp Tìm từ có chiều dài dài in Trích n ký tự đầu tiên/cuối cùng/bắt đầu vị trí pos Tìm kiếm thay xâu xâu ký tự lớn Viết chương trình nhập vào xâu ký tự xoá k ký tự xâu ký tự vị trí thứ n 76 Bài tập Nhập xâu họ tên (khơng q 40 kí tự), chuẩn hố xâu (kí tự đầu từ viết hoa, kí tự khác viết thường, từ cách dấu cách) Nhập xâu s1, s2, s3 (khơng q 40 kí tự), thay xâu s2 s3 s1 10 Nhập xâu kí tự Đưa xâu dạng chuẩn (các từ cách 01 dấu cách, chữ đầu xâu viết hoa, chữ lại viết thường,…) 77 ... chiều Con trỏ phép toán trỏ Khai báo trỏ Phép gán trỏ Truy xuất giá trị qua trỏ Con trỏ mảng Cấp phát vùng nhớ cho trỏ Xâu ký tự Khái niệm Khởi tạo Các thao tác xâu ký tự PHẦN... toán với trỏ Phép so sánh hai trỏ Trên trỏ tồn phép so sánh (= =, !=, =) hai trỏ hai trỏ trỏ tới đối tượng (có giá trị nhau), ngược lại khác Con trỏ trỏ tới vùng nhớ có địa nhỏ trỏ nhỏ... 39 Gán trỏ Có thể gán biến trỏ: int *p1, *p2; p2 = p1; – Gán trỏ cho trỏ khác – «Chỉ định p2 trỏ tới nơi mà p1 trỏ tới» Dễ bị lẫn với: *p2 = *p1; – Gán “giá trị trỏ p1” cho “giá trị trỏ p2”