Mời các bạn cùng tham khảo Bài giảng Lập trình cơ bản: Ngôn ngữ lập trình C để nắm chi tiết các kiến thức về mảng, con trỏ và xâu ký tự; mảng một chiều và nhiều chiều; con trỏ và các phép toán; xâu ký tự.
Lập trình bản: Ngơn ngữ lập trình C Đỗ Thị Mai Hường Bộ môn Hệ thống thông tin Khoa Công nghệ thông tin Mảng, trỏ xâu ký tự 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 Chương - Phần 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ự Chương - Phần 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ố nguyên, 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(0 s1 > s2 char s1[] = “tin hoc co so A!!!”; char s2[] = “hoc tin co so A!!!”; int kq = strcmp(s1, s2); // => kq > 74 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 == 75 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!!!” 76 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 77 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!”); 78 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ý 79 tự xâu ký tự vị trí thứ n 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 80 (các từ cách 01 dấu cách, chữ ... 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ố nguyên, 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... Bien_Nguyen; float *Con_Tro_Thuc; Con_Tro_Thuc=&Bien_Nguyen; • Phép gán sai Con_Tro_Thuc trỏ kiểu float (nó chứa địa biến kiểu float); đó, Bien_Nguyen c? ? kiểu int 35 C? ?c thao t? ?c trỏ Nội dung ô... trỏ kh? ?c kiểu phải dùng phép ép kiểu int x; char *pc; pc=(char*)(&x); • • • 48 Phép tăng giảm địa chỉ: Sử dụng phép toán để di chuyển ô nhớ: Ví dụ: C? ?c câu lệnh: float x[30],*px; px=&x[10]; Cho