220 likes | 405 Views
CHƯƠNG 7 CHUỖI KÝ TỰ. 1. Khái niệm Trong C++ không có kiểu dữ liệu cơ bản để lưu các xâu kí tự . Để có thể thỏa mãn nhu cầu này , người ta sử dụng mảng có kiểu char . Chuỗi kí tự thực chất là mảng một chiều các phần tử có kiểu char ( mảng 1 chiều các kí tự )
E N D
1. Khái niệm TrongC++ khôngcókiểudữliệucơbảnđểlưucácxâukítự. Đểcóthểthỏamãnnhucầunày, người ta sửdụngmảngcókiểuchar. Chuỗikítựthựcchấtlàmảngmộtchiềucácphầntửcókiểu char (mảng 1 chiềucáckítự) Mộtchuỗitrong C luônluônđượckếtthúcbằng ‘\0’ (kítự NULL), kítựnày do C tựđộngthêmvàokhichúng ta nhậpdữliệuchochuỗi Hằngchuỗiđượcđặttrongcặpnháykép, vídụ: “I LOVE C++”
2. Khai báo Chuỗi pc s I L O V E C + + • Cách 1: Dùngmảngmộtchiều charstringName[Max_Length]; Ví dụ: chars[10]; • Cách 2: Dùng con trỏ char *PointerName; Ví dụ: char *pc;
Khởi tạo chuỗi • Cú pháp: char stringName= “Hằng chuỗi” • Ví dụ: char str[] = {‘H’, ’e’, ’l’, ’l’, ’o’, ’\0’}; //CÁCH 1 char str[] = “Hello”; //CÁCH 2 char *str = “Hello”; //CÁCH 3
3. Mộtsốhàmliênquanđếnkítự • intisalnum(intkt); làhàmkiểmtraktcóphảilàkítự (chữcáihoặcchữsố) hay không • intisalpha(intkt); làhàmkiểmtraktcóphảilàchữcái hay không • intisdigit(intkt); làhàmkiểmtraktcóphảilàchữsố hay không • intislower(intkt); làhàmkiểmtraktcóphảilàchữcáithường hay không • … Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM
4. Mộtsốhàmliênquanđếnchuỗi Hàmnhậpchuỗi: char *get(char *str); Tác dung: Chờnhậpvàotừbànphímchuỗikítự, hàmtrảvề con trỏtrỏđếnđầuchuỗistr Chú ý rằng, đểđảmbảobộđệmbànphímđượclàmrỗngtrướckhinhậpdữliệuchuỗi, chúng ta nênsửdụnghàmfflush(stdin) Ngoàira ta cóthểdùngthủtụccinhoặccin.getline Hàmxuấtchuỗi: char *puts(char *str); Tácdụng: xuấtchuỗistrrathiếtbịxuấtchuẫn Ngoàira ta cóthểdùngthủtụccout Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM
Một số hàm khác liên qua đến chuỗi Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM
Một số hàm khác liên qua đến chuỗi Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM
5. Mảng các Chuỗi char arrayList[][length] = { constantString1, constantString2,..., constantStringN }; Ví dụ: char listOfPL[][10] = { “Pascal”, “C++”, “C#” }; • Mảng các Chuỗi là một mảng ký tự hai chiều. Kích thước của chỉ mục thứ nhất là số Chuỗi và kích thước của chỉ mục thứ hai xác định chiều dài lớn nhất của mỗi Chuỗi. Ví dụ: charstr[5][80]; • Khởi tạo mảng các Chuỗi
7. Mảng con trỏ đến các Chuỗi • 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ỗi con trỏ sẽ chứa địa chỉ của Chuỗi • Ví dụ: char *str[20];
Ví dụ mảng con trỏ void main() { char *name[5]; for(int i=0 ; i<5 ; i++) name[i] = new char[50]; for(int i=0 ; i<5 ; i++) { cout << "Input name " << i+1 <<": "; gets(name[i]); } cout << "List of names: "; for(int i=0 ; i<5 ; i++) cout << name[i] << ", "; }
Ví dụ: kiểm tra chuỗi đối xứng voidmain() { char s[255]; cout<<“Ban hay nhapchuoi:”; gets(s); intlen=strlen(s); int flag=1; for (int i=0; i < len/2 ; i++) if (*(s+i)!= *(s+l-i-1)) { flag=0; break; } if(flag==0) cout<<"chuoikhongdoixung “; } Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM
Ví dụ: In Hoa Đầu Mỗi Từ voidmain() { char *s=new char[80]; cout<<“Nhapchuoi:”; gets(s); s[0]=toupper(s[0]); for (int i=0; i<strlen(s);i++) if (s[i]= =' ') s[i+1]=toupper(s[i+1]); puts(s); delete s; } Đào Thị Cẩm Hằng- Khoa KH và KT Máy Tính- Trường ĐẠI HỌC CÔNG NGHIỆP TP.HCM
Ví dụ: Tìm chuỗi con voidmain() { char *p, str1[20], str2[20]; cout<<"nhapchuoi 1:"; gets(str1); cout<<"nhapchuoi 2:"; gets(str2); p= strstr(str1,str2); if(p==NULL) cout<<"Khongtimthay "; else cout<<"Tim thay tai vi tri "<< (p-str1) ; }