Bài giảng Phương pháp lập trình - Chương 7: Chuổi ký tự (String) - Võ Quang Hoàng Khang

pdf 18 trang phuongnguyen 2731
Bạn đang xem tài liệu "Bài giảng Phương pháp lập trình - Chương 7: Chuổi ký tự (String) - Võ Quang Hoàng Khang", để 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:

  • pdfbai_giang_phuong_phap_lap_trinh_chuong_7_chuoi_ky_tu_string.pdf

Nội dung text: Bài giảng Phương pháp lập trình - Chương 7: Chuổi ký tự (String) - Võ Quang Hoàng Khang

  1. CHƯƠNG 7 CHUỔI KÝ TỰ (String)
  2. 1. Gi ớithii thiệu y Chuổilàmộtmảng ký tự đượckết thúc bằng ký tự null (‘\0’). y Ký tự null (‘\0’) là ký tự dùng để kết thúc chuổi y Hằng chuổi là chuổi được bao quanh bởi cặpdấu nháy đôi. Ví dụ: "Hello"
  3. 2. Khai báo và khởi tạo chuổi Có 2 cách khai báo và khởitạochuổi y Cách 1: Dùng mảng mộtchiều char [Chiều dài tối đa] y Ví dụ: char str[12]; Trong khai báo này, bộ nhớ sẽ cung cấp12+1bytesđể lưutrữ nộidung củachuỗikýtự str; byte cuối cùng lưu trữ ký tự ‘\0’ để kếtthúcchuỗi.
  4. 2. Khai báo vààkhkhởiittạoochuchuổii Cách 2: Dùng con trỏ char * yVí dụ: char *str; Trong khai báonàày, bộ nhớ sẽ dành 2 byte để lưutrữđịachỉ củabiếncontrỏ str đang chỉ đến, chưacung cấpnơi để lưutrữ dữ liệu.
  5. 2. Khai báo và khởi tạo chuổi. y Chuổiký tự giống như mảng do đó để khởitạomộtchuổikýtự vớinhững giá trị xác định ta có thể thựchiệntương tự như vớimảng. char [ ]=
  6. 2. Khai báo và khởi tạo chuổi. y Vídụ: char str[] = {‘H’, ’e’, ’l’, ’l’, ’o’, ’\0’}; char str[] = “Hello”; char *str = “Hello”;
  7. 3. Nhập chuổi y Để nhập dữ liệuchobiếnchuổi, ta dùng hàm gets() củathư việnstdio.h. char * get t(hs(char *)*s); y Hàm gets() đọc các ký tự từ bàn phím vào trong mảng trỏđếnbởischođến khi nhấn Enter. Ký tự null sẽ được đặt sau ký tự cuối cùng củachuổinhậpvào trong mảng. y Hoặctacóthể dùng cin >> s;
  8. 4. Xuất chuổi y Để xuấtchuổiramànhình, ta dùng hàm puts() củathư việnstdio.h. int puts(const char *s); y Hoặc ta có thể dùng cout y cout << s;
  9. Ví dụ: #include #include int main() { char str[20]; cout<<"nhap chuoi:"; gets(str); cout<<"\nXuat chuoi::;"; puts(str); return 0; }
  10. 5. Các hàm thao tác trên chuổi y strcpy(s1, s2): Sao chép chuổis2 vàos1 Ví dụ: #include #include #include void main() { char str1[20], str2[20]; cout<<"nhap chihuoi 1"1:"; get(t1)ts(str1); strcpy(str2,str1); cout<<"\nXuat chuoi 2:" ; puts(str2); }
  11. 5. Các hàm thao tác trên chuổi y strcat(s1, s2): Nốichuổis2 vàocuốichuổis1 Ví dụ: #include #include #include void main() { char str1[20], str2[20]; cout<<"nhap chuoi 1:"; gets(str1); cout<<"\nhap chuoi 2:"; gets(str2); strcat(str1,str2); cout<<"\nXuat chuoi sau khi noi:"; puts(str1); }
  12. 5. Các hàm thao tác trên chuổi y strchr(s1, ch) : Trả về con trỏ đếnvị trí xuất hiện đầu tiên của ký tự ch tongtrong chuổi s1 Ví dụ: void main() { char *p, h, str1[20]; cout >h; p= strchr(str1, h); if(p==NULL) cout<<"Khong tim thay "; else cout<<"Tim thay tai vi tri "<<(p-str1); }
  13. 5. Các hàm thao tác trên chuổi y strstr(s1, s2): Trả về con trỏ đếnvị trí xuấthiện đầutiêncủachuổis2trong s1. Ví dụ:voidmain() { char *p, str1[20],str2[20]; cout<<"nhap chuoi 1:"; gets(str1); cout<<"nhap chuoi 2:"; gets(str2); p= strstr(str1,str2); if(p== NULL) cout<<"Khong tim thay "; else cout<<"Tim thay tai vi tri "<<(p-str1); }
  14. 6. Mảng các chuổi y Mảng các chuổilàmộtmảng ký tự hai chiều. Kích thướccủachỉ mụcthứ nhất là số chuổivàkíchthướccủachỉ mục thứ hai xác định chiềudàilớnnhấtcủa mỗichuổi. Ví dụ: char str[5][80]; Khai báo một mảng của 5 chuổi, mỗi chuổicóchiềudàitối đalà79kýtự.
  15. 6. Mảng các chuổi y Khai báo vàkhởi tạomảng các chuổi char arrayList[][length] = { constantString1, constantString2, constantStringN}; y Ví dụ: char listOfPL[][10] = {“Pascal”, “C++”, “C#”};
  16. 6. Mảng các chuổi Ví dụ: void main() { char li st[5][20] ; for(int i=0; i >list[i]; } for(int j=0; j<5; j++) cout<<"" <<list[j]; }
  17. 7. Mảng con trỏ đến các chuổi y Ngoài cách dùng mảng ký tự hai chiều để lưu trữ mảng các chuổi, ta có thể dùng mảng của các con trỏ.Mỗicontrỏ sẽ chứa địachỉ của chuổi y Ví dụ: char *str[20];
  18. void main() { char *name[5]; for(int i=0 ; i<5 ; i++) name[i] = (char *)malloc(20); for(int i=0 ; i<5 ; i++) { cout << "Input name " << i+1 <<": "; gets(name[i]); } cout << "List ooaf names: "; for(int i=0 ; i<5 ; i++) cout << name[i] << ", "; }