Bài giảng Nhập môn lập trình - Bài 6: Xử lý chuỗi và con trỏ
1. Khái niệm và cấu trúc về chuỗi
2. Các hàm nhập xuất chuỗi
3. Một số hàm cơ bản về chuỗi
4. Mảng và chuỗi
Tóm tắt nội dung Bài giảng Nhập môn lập trình - Bài 6: Xử lý chuỗi và con trỏ, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Click to edit Master title style Click to edit Master text styles Second level Third level Fourth level Fifth level 04/02/2015 ‹#› Bài 6: Xử Lý Chuỗi & Con trỏ 2 1. Khái niệm và cấu trúc về chuỗi 2. Các hàm nhập xuất chuỗi 3. Một số hàm cơ bản về chuỗi 4. Mảng và chuỗi 3 1. Khái niệm Chuỗi là một mảng ký tự được kết thúc bằng ký tự null (‘\0’). Ký tự null (‘\0’) là ký tự dùng để kết thúc Chuỗi Hằng Chuỗi là Chuỗi được bao quanh bởi cặp dấu nháy đôi. Ví dụ: “Hello” Ví dụ: để khai báo một mảng str chứa chuỗi có độ dài 20 ký tự, ta khai báo: char str[21]; 4 1. 1. Khai báo và khởi tạo Chuỗi Có 2 cách khai báo và khởi tạo Chuỗi Cách 1: Dùng mảng một chiều Ví dụ: char str[12]; char [Chiều dài tối đa] 5 1. 1. Khai báo và khởi tạo Chuỗi Ví dụ: char str[25]; Ý nghĩa khai báo một mảng kiểu ký tự tên là str có 25 phần tử ( như vậy tối đa ta có thể nhập 24 ký tự vì phần tử thứ 25 đã chứa ký tự kết thúc chuỗi ‘\0’. Lưu ý: Chuỗi ký tự được kết thúc bằng ký tự ‘\0’. Do đó khi khai báo độ dài của chuỗi luôn luôn khai báo dư 1 phần tử để chứa ký tự ‘\0’. 6 Cách 2: Dùng con trỏ Ví dụ: char *str; Trong khai báo này, bộ nhớ sẽ dành 2 byte để lưu trữ địa chỉ của biến con trỏ str đang chỉ đến, chưa cung cấp nơi để lưu trữ dữ liệu. char * 1. 1. Khai báo và khởi tạo Chuỗi 7 Cách 2: Dùng con trỏ 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ự 1. 1. Khai báo và khởi tạo Chuỗi 8 1. 1. Khai báo và khởi tạo Chuỗi Chuỗi ký tự giống như mảng do đó để khởi tạo một Chuỗi ký tự với những giá trị xác định ta có thể thực hiện tương tự như với mảng. char [ ]= 9 1. 1. Khai báo và khởi tạo Chuỗi Ví dụ: char str[] = {‘H’, ’e’, ’l’, ’l’, ’o’, ’\0’}; char str[] = “Hello”; char *str = “Hello”; 10 2.1. Nhập Chuỗi Để nhập dữ liệu cho biến Chuỗi, ta dùng hàm gets() của thư viện stdio.h. Hàm gets() đọc các ký tự từ bàn phím vào trong mảng trỏ đến bởi s cho đến khi nhấn Enter. Ký tự null sẽ được đặt sau ký tự cuối cùng của Chuỗi nhập vào trong mảng. char *gets(char *s); 11 Lưu ý: Khi dùng cin>> để nhập dữ liệu cho chuỗi, chương trình sẽ tự động ngắt chuỗi khi gặp ký tự khoảng trắng trong chuỗi. Do đó, để chuỗi không bị ngắt khi gặp ký tự khoảng trắng, ta sẽ dùng hàm gets(), hoặc cin.getline() thay vì hàm cin thông thường. 2.1. Nhập Chuỗi *cin.getline(chuỗi, số ký tự tối đa); *Ví dụ: char *str; str = new char [30]; cin.getline(str, 30); 12 2.2. Xuất Chuỗi Để xuất Chuỗi ra màn hình, ta dùng hàm puts() của thư viện stdio.h. Hoặc ta có thể dùng cout cout #include int main() { char str[20]; cout Sao chép nội dung chuỗi nguồn vào chuỗi đích, nội dung của chuỗi đích sẽ bị xóa. strcpy(char *đích, char *nguồn); 16 3. Các hàm thao tác trên Chuỗi Ví dụ: strcpy(s1, s2): Sao chép Chuỗi s2 vào s1 #include #include #include void main() { char str1[20], str2[20]; cout #include #include void main() { char str1[20], str2[20]; cout>h; p= strchr(str1,h); if(p==NULL) cout 3. Các hàm thao tác trên Chuỗi 28 3. Các hàm thao tác trên Chuỗi 29 4.1. Mảng các chuỗi 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ụ: char str[5][80]; Khai báo một mảng của 5 Chuỗi, mỗi Chuỗi có chiều dài tối đa là 79 ký tự. 30 4.1. Mảng các chuỗi Khai báo và khởi tạo mảng các Chuỗi char arrayList[][length] = { constantString1, constantString2, ... constantStringN}; Ví dụ: char listOfPL[][10] = {“Pascal”, “C++”, “C#”}; 31 Ví dụ: void main() { char list[5][20]; for(int i=0; i>list[i]; } for(int j=0; j<5; j++) cout<<" "<<list[j]; } 4.1. Mảng các chuỗi 32 4.2. 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]; 33 4.2. Mảng con trỏ đến các Chuỗi Cũng ví dụ như phần trên, ta dùng mảng con trỏ char *listOfPL[] = {“Pascal”, “C/C++”, “CSharp”, “Java”, “VB”}; Mảng con trỏ trên có thể được lưu trữ trong bộ nhớ như sau: 34 void main() { char *name[5]; for(int i=0 ; i<5 ; i++) //name[i] = (char *)malloc(20); name[i] = new char[20]; 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] << ", "; } 4.2. Mảng con trỏ đến các Chuỗi
File đính kèm:
- 6.NMLT_XuLyChuoi_ConTro(3g)-01.pptx