Bài giảng Cơ sở lập trình - Chương 7: Giới thiệu con trỏ và chuỗi kí tự

ppt 16 trang phuongnguyen 2571
Bạn đang xem tài liệu "Bài giảng Cơ sở lập trình - Chương 7: Giới thiệu con trỏ và 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:

  • pptbai_giang_co_so_lap_trinh_chuong_7_gioi_thieu_con_tro_va_chu.ppt

Nội dung text: Bài giảng Cơ sở lập trình - Chương 7: Giới thiệu con trỏ và chuỗi kí tự

  1. * CHƯƠNG 7 GIỚI THIỆU CON TRỎ VÀ CHUỖI KÝ TỰ 1
  2. *ĐỊA CHỈ CỦA BIẾN Thông tin của một biến bao gồm: *Tên biến *Kiểu dữ liệu của biến *Giá trị của biến Mỗi biến sẽ được lưu trữ tại một vị trí xác định trong ô nhớ, nếu kích thước của biến có nhiều byte thì máy tính sẽ cấp phát một dãy các byte liên tiếp nhau, địa chỉ của biến sẽ lưu byte đầu tiên trong dãy các byte này 2
  3. *ĐỊA CHỈ CỦA BIẾN (tt) *Ví dụ khai báo: float x; int a; Địa chỉ biến x Địa chỉ biến a Byte 1 Byte 100 Các ô Các ô nhớ Byte 2 nhớ Byte 101 của của Byte 3 Byte 102 biến x biến a Byte 4 Byte 103 3
  4. *ĐỊA CHỈ CỦA BIẾN (tt) *Địa chỉ của biến luôn luôn là một số nguyên (hệ thập lục phân) dù biến đó chứa giá trị là số nguyên, số thực hay ký tự, *Cách lấy địa chỉ của biến & tênbiến *Ví dụ: void main() Kết quả { Dia chi cua bien x = 0014FC00 int x=7; Dia chi cua bien y = 0014FBF4 float y=10.5; cout<<"Dia chi cua bien x = "<<&x<<endl; cout<<"Dia chi cua bien y = "<<&y; } 4
  5. *CON TRỎ *Con trỏ là một biến để chứa địa chỉ, có nhiều loại con trỏ tùy thuộc vào địa chỉ của mỗi loại kiểu biến *Cách khai báo con trỏ Kiểu dữ liệu * TênConTrỏ *Ví dụ: int *px, y; float *pm, n; *Cách lấy giá trị của con trỏ * TênConTrỏ 5
  6. *CHƯƠNG TRÌNH VÍ DỤ void main() { int *px, y; Lấy địa chỉ của biến y float *pa, b; gán vào px y=10; b=14.5; Lấy giá trị của con px=&y; trỏ px pa=&b; cout<<"Gia tri cua px = "<<*px<<endl; cout<<"Gia tri cua pa = "<<*pa; } Kết quả Gia tri cua px = 10 Gia tri cua pa = 14.5 6
  7. * CHUỖI KÝ TỰ *Chuôĩ ky ́ tự la ̀ môṭ daỹ cać phâǹ tử, môĩ phâǹ tử co ́ kiêủ ky ́ tự *Khai báo: *Cach́ 1: Con tro ̉ hăng̀ char Tênchuôi[ ]̃ ; Vi ́ du:̣ char chuoi[25]; *Ý nghiã khai baó 1 mang̉ kiêủ ky ́ tự tên la ̀ chuoi co ́ 25 phâǹ tử (như vâỵ tôí đa ta co ́ thê ̉ nhâp̣ 24 ky ́ tự vi ̀ phâǹ tử thứ 25 đa ̃ chứa ký tự kết thúc chuỗi ‘\0’ ) *Lưu y:́ Chuôĩ ky ́ tự được kêt́ thuć băng̀ ky ́ tự ‘\0’. Do đo ́ khi khai baó đô ̣ daì cuả chuôĩ luôn luôn khai baó dư 1 phâǹ tử đê ̉ chứa ky ́ tự ‘\0’. 7
  8. *KHAI BÁO *Cach́ 2: Con trỏ char * ; Vi ́ du:̣ char *chuoi; Trước khi sử dụng phải dùng từ khóa new để cấp phát vùng nhớ Ví dụ: char *str; str = new char[51];//Cấp phát 51 ký tự 8
  9. *NHẬP CHUỖI *cin.getline(chuoi, số ký tự tối đa); *Ví dụ: char *str; str = new char [30]; cin.getline(str, 30); 9
  10. *VÍ DỤ Viết chương trình nhập và xuất chuỗi ký tự #define MAX 255 void main() { char str1[MAX]; char *str2; cout<<"Nhap chuoi str1: "; cin.getline(str1, MAX); str2 = new char[MAX]; cout<<"Nhap chuoi str2: "; cin.getline(str2, MAX); cout<<"Chuoi str1: "<<str1<<endl; cout<<"Chuoi str2: "<<str2<<endl; } 10
  11. *CÁC HÀM THƯ VIỆN – string.h *Tính độ dài của chuỗi s int strlen(char *s); void main() { char *s = "Lap trinh C"; cout<<"Do dai s = "<<strlen(s); } Kết quả Do dai s = 11 11
  12. *CÁC HÀM THƯ VIỆN – string.h *Sao cheṕ nôị dung chuôĩ nguồn vaò chuôĩ đích, nội dung của chuỗi đích sẽ bị xóa strcpy(char *đích, char *nguồn); *Cheṕ n ky ́ tự từ chuôĩ nguồn sang chuôĩ đích. Nêú chiêù daì nguồn < n thi ̀ ham̀ se ̃ điêǹ khoang̉ trănǵ cho đu ̉ n ky ́ tự vaò đích strncpy(char *đích, char *nguồn, int n); 12
  13. *Nôí chuôĩ s2 vaò chuôĩ s1 strcat(char s1[],char s2[]); *Nôí n ky ́ tự đâù tiên cuả chuôĩ s2 vaò chuôĩ s1 strncat(char s1[],char s2[],int n); *So sanh́ 2 chuôĩ s1 va ̀ s2 theo nguyên tăć thứ tự từ điên̉ . Phân biêṭ chữ hoa va ̀ thường. Tra ̉ vê:̀ 0 : nêú s1 băng̀ s2. >0: nêú s1 lớn hơn s2. <0: nêú s1 nho ̉ hơn s2. int strcmp(char s1[],char s2[]); 13
  14. *So 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); *So 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[]); *So sánh n ký tự đầu tiên của 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 strnicmp(char s1[],char s2[], int n); 14
  15. *Tim̀ sự xuât́ hiêṇ đâù tiên cuả ky ́ tư c trong chuôĩ s. Tra ̉ vê:̀ NULL: nêú không có Điạ chi ̉ c: nêú tim̀ thâý char *strchr(char s[], char c); *Tim̀ sự xuât́ hiêṇ đâù tiên cuả chuôĩ s2 trong chuôĩ s1. Tra ̉ vê:̀ NULL: nêú không có Ngược lai:̣ Điạ chi ̉ băt́ đâù chuôĩ s2 trong s1 char *strstr(char s1[], char s2[]); 15
  16. *BÀI TẬP *Nhập vào một chuỗi ký tự, xuất ra màn hình chuỗi bị đảo ngược thứ tự các ký tự. *Viêt́ chương trinh̀ đêḿ co ́ bao nhiêu khoang̉ trănǵ trong chuôi.̃ *Viêt́ chương trinh̀ nhâp̣ vaò hai chuôĩ s1 va ̀ s2, nôí chuôĩ s2 vaò s1. Xuât́ chuôĩ s1 ra maǹ hinh.̀ * Đôỉ tât́ ca ̉ cać ky ́ tự co ́ trong chuôĩ thanh̀ chữ thường (không dung̀ ham̀ strlwr). *Đôỉ tât́ ca ̉ cać ky ́ tự trong chuôĩ sang chữ in hoa (không dung̀ ham̀ struppr). 16