Bài giảng Ngôn ngữ lập trình C++ - Chương 5: Con trỏ và xâu ký tự

Đề mục

5.1 Giới thiệu
5.2 Khai báo và khởi tạo biến con trỏ
5.3 Các thao tác trên con trỏ
5.4 Gọi hàm bằng tham chiếu
5.5 Sử dụng const với con trỏ
5.6 Sắp xếp nổi bọt sử dụng Pass-by-Reference
5.7 Các phép toán trên con trỏ
5.8 Quan hệ giữa con trỏ và mảng
5.9 Mảng con trỏ
5.10 Ví dụ: giả lập tráo và chia bài
5.11 Con trỏ tới hàm
5.12 Giới thiệu về xử lý ký tự và xâu
5.12.1 Tổng quát về ký tự và xâu
5.12.2 Các hàm xử lý xâu

 

ppt77 trang | Chuyên mục: C/C++ | Chia sẻ: dkS00TYs | Lượt xem: 1734 | Lượt tải: 3download
Tóm tắt nội dung Bài giảng Ngôn ngữ lập trình C++ - Chương 5: Con trỏ và xâu ký tự, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Quan hệ giữa con trỏ và mảng5.9 	Mảng con trỏ5.10 	Ví dụ: giả lập tráo và chia bài5.11 	Con trỏ tới hàm5.12 	Giới thiệu về xử lý ký tự và xâu	5.12.1 	Tổng quát về ký tự và xâu	5.12.2 	Các hàm xử lý xâu 5.1	Giới thiệu Con trỏ (Pointer) Mạnh, nhưng khó làm chủ Có tác dụng như truyền tham chiếu (pass-by-reference) Có liên quan chặt chẽ đến mảng và xâu Biến con trỏ (Pointer variable) Chứa địa chỉ vùng nhớ thay vì chứa giá trị Thông thường, biến chứa giá trị (tham chiếu trực tiếp) Con trỏ chứa địa chỉ của biến mang giá trị cụ thể (tham chiếu gián tiếp) 5.2	Khai báo và khởi tạo biến con trỏ Khai báo con trỏ * cho biết biến là con trỏ int *myPtr; dữ liệu kiểu int có địa chỉ là myPtr, con trỏ kiểu int * Mỗi con trỏ cần một dấu sao int *myPtr1, *myPtr2; Có thể khai báo con trỏ tới bất cứ kiểu dữ liệu nào Khởi tạo con trỏ (Pointer initialization) Khởi tạo về 0, NULL, hoặc địa chỉ 0 hoặc NULL không trỏ đến đâu cả   5.3	Các thao tác đối với con trỏ & Toán tử địa chỉ (address operator) Trả về địa chỉ vùng nhớ của toán hạng Ví dụ int y = 5;int *yPtr;yPtr = &y; // yPtr chứa địa chỉ của y yPtr “trỏ đến” y 5.3	Các thao tác đối với con trỏ * phép thâm nhập (indirection/dereferencing) Trả về đối tượng mà con trỏ trỏ tới *yPtr trả về y (vì yPtr trỏ đến y). con trỏ khi bị thâm nhập (dereferenced) là giá trị trái (lvalue) *yptr = 9; // assigns 9 to y * và & ngược nhau fig05_04.cpp(1 of 2) 1 // Fig. 5.4: fig05_04.cpp 2 // Using the & and * operators. 3 #include 4 5 using std::cout; 6 using std::endl; 7 8 int main() 9 { 10 int a; // a is an integer 11 int *aPtr; // aPtr is a pointer to an integer 12 13 a = 7; 14 aPtr = &a; // aPtr assigned address of a 15 16 cout 4 5 using std::cout; 6 using std::endl; 7 8 int cubeByValue( int ); // prototype 9 10 int main() 11 { 12 int number = 5; 13 14 cout 5 6 using std::cout; 7 using std::endl; 8 9 void cubeByReference( int * ); // prototype 10 11 int main() 12 { 13 int number = 5; 14 15 cout 5 6 using std::cout; 7 using std::endl; 8 9 #include // prototypes for islower and toupper 10 11 void convertToUppercase( char * ); 12 13 int main() 14 { 15 char phrase[] = "characters and $32.98"; 16 17 cout 5 6 using std::cout; 7 using std::endl; 8 9 void printCharacters( const char * ); 10 11 int main() 12 { 13 char phrase[] = "print characters of a string"; 14 15 cout 4 5 using std::cout; 6 using std::endl; 7 8 int main() 9 { 10 int x = 5, y; 11 12 // ptr is a constant pointer to a constant integer. 13 // ptr always points to the same location; the integer 14 // at that location cannot be modified. 15 const int *const ptr = &x; 16 17 cout 5 6 using std::cout; 7 using std::endl; 8 9 #include 10 11 using std::setw; 12 13 void bubbleSort( int *, const int ); // prototype 14 void swap( int * const, int * const ); // prototype 15 16 int main() 17 { 18 const int arraySize = 10; 19 int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 20 21 cout array[ k + 1 ] ) 50 swap( &array[ k ], &array[ k + 1 ] ); fig05_15.cpp(3 of 3)fig05_15.cppoutput (1 of 1) 51 52 } // end function bubbleSort 53 54 // swap values at memory locations to which 55 // element1Ptr and element2Ptr point 56 void swap( int * const element1Ptr, int * const element2Ptr ) 57 { 58 int hold = *element1Ptr; 59 *element1Ptr = *element2Ptr; 60 *element2Ptr = hold; 61 62 } // end function swap Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in ascending order 2 4 6 8 10 12 37 45 68 89 5.6 	Sắp xếp nổi bọt sử dụng truyền tham chiếu sizeof Toán tử trả về kích thước byte của toán hạng Với mảng, sizeof trả về giá trị ( kích thước 1 phần tử ) * ( số phần tử ) Nếu sizeof( int ) = 4, thì int myArray[10]; cout 5 6 using std::cout; 7 using std::endl; 8 9 size_t getSize( double * ); // prototype 10 11 int main() 12 { 13 double array[ 20 ]; 14 15 cout 5 6 using std::cout; 7 using std::endl; 8 9 int main() 10 { 11 int b[] = { 10, 20, 30, 40 }; 12 int *bPtr = b; // set bPtr to point to array b 13 14 // output array b using array subscript notation 15 cout 5 6 using std::cout; 7 using std::endl; 8 9 void copy1( char *, const char * ); // prototype 10 void copy2( char *, const char * ); // prototype 11 12 int main() 13 { 14 char string1[ 10 ]; 15 char *string2 = "Hello"; 16 char string3[ 10 ]; 17 char string4[] = "Good Bye"; 18 19 copy1( string1, string2 ); 20 cout 4 5 using std::cout; 6 using std::left; 7 using std::right; 8 9 #include 10 11 using std::setw; 12 13 #include // prototypes for rand and srand 14 #include // prototype for time 15 16 // prototypes 17 void shuffle( int [][ 13 ] ); 18 void deal( const int [][ 13 ], const char *[], const char *[] ); 19 20 int main() 21 { 22 // initialize suit array 23 const char *suit[ 4 ] = 24 { "Hearts", "Diamonds", "Clubs", "Spades" }; 25 fig05_24.cpp(2 of 4) 26 // initialize face array 27 const char *face[ 13 ] = 28 { "Ace", "Deuce", "Three", "Four", 29 "Five", "Six", "Seven", "Eight", 30 "Nine", "Ten", "Jack", "Queen", "King" }; 31 32 // initialize deck array 33 int deck[ 4 ][ 13 ] = { 0 }; 34 35 srand( time( 0 ) ); // seed random number generator 36 37 shuffle( deck ); 38 deal( deck, face, suit ); 39 40 return 0; // indicates successful termination 41 42 } // end main 43 fig05_24.cpp(3 of 4) 44 // shuffle cards in deck 45 void shuffle( int wDeck[][ 13 ] ) 46 { 47 int row; 48 int column; 49 50 // for each of the 52 cards, choose slot of deck randomly 51 for ( int card = 1; card 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 #include 10 11 using std::setw; 12 13 // prototypes 14 void bubble( int [], const int, bool (*)( int, int ) ); 15 void swap( int * const, int * const ); 16 bool ascending( int, int ); 17 bool descending( int, int ); 18 19 int main() 20 { 21 const int arraySize = 10; 22 int order; 23 int counter; 24 int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; 25 fig05_25.cpp(2 of 5) 26 cout > order; 29 cout a; // swap if b is greater than a 99 100 } // end function descending Enter 1 to sort in ascending order, Enter 2 to sort in descending order: 1   Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in ascending order 2 4 6 8 10 12 37 45 68 89 Enter 1 to sort in ascending order, Enter 2 to sort in descending order: 2   Data items in original order 2 6 4 8 10 12 89 68 45 37 Data items in descending order 89 68 45 37 12 10 8 6 4 2 5.11	Con trỏ tới hàm Mảng gồm các con trỏ hàm Thường dùng cho các hệ thống điều khiển bằng thực đơn (menu-driven system) Các con trỏ đến từng hàm được lưu trong mảng con trỏ hàm các hàm đều phải có kiểu dữ liệu trả về giống nhau, và kiểu dữ liệu của tham số như nhau Ánh xạ (lựa chọn thực đơn  chỉ số trong mảng con trỏ tới hàm) fig05_26.cpp(1 of 3) 1 // Fig. 5.26: fig05_26.cpp 2 // Demonstrating an array of pointers to functions. 3 #include 4 5 using std::cout; 6 using std::cin; 7 using std::endl; 8 9 // function prototypes 10 void function1( int ); 11 void function2( int ); 12 void function3( int ); 13 14 int main() 15 { 16 // initialize array of 3 pointers to functions that each 17 // take an int argument and return void 18 void (*f[ 3 ])( int ) = { function1, function2, function3 }; 19 20 int choice; 21 22 cout > choice; 24 fig05_26.cpp(2 of 3) 25 // process user's choice 26 while ( choice >= 0 && choice > choice; 34 } 35 36 cout > word Đọc các ký tự cho đến khi gặp ký tự trắng hoặc EOF Xâu có thể vượt quá kích thước mảng cin >> setw( 20 ) >> word; Đọc 19 ký tự (để lại chỗ cho '\0') cin.getline Đọc 1 dòng văn bản cin.getline( array, size, delimiter ); Lưu input vào mảng array đến khi xảy ra một trong hai trường hợp Kích thước dữ liệu đạt đến size – 1 Ký tự delimiter được nhập vào Ví dụ char sentence[ 80 ]; cin.getline( sentence, 80, '\n' ); 5.12.2 Các hàm xử lý xâu ký tự Thư viện xử lý xâu cung cấp các hàm thao tác với dữ liệu kiểu xâu so sánh xâu tìm kiếm trên xâu các ký tự hoặc xâu khác chia xâu thành các từ tố (tokenize strings) 5.12.2 Các hàm xử lý xâu ký tự 5.12.2 Các hàm xử lý xâu ký tự 5.12.2 Các hàm xử lý xâu ký tự Copy xâu char *strcpy( char *s1, const char *s2 ) Copy tham số thứ hai vào tham số thứ nhất Tham số thứ nhất phải có kích thước đủ lớn để chứa xâu và ký tự null char *strncpy( char *s1, const char *s2, 	 size_t n ) Xác định rõ số ký tự được copy từ xâu vào mảng Không nhất thiết copy ký tự null fig05_28.cpp(1 of 2) 1 // Fig. 5.28: fig05_28.cpp 2 // Using strcpy and strncpy. 3 #include 4 5 using std::cout; 6 using std::endl; 7 8 #include // prototypes for strcpy and strncpy 9 10 int main() 11 { 12 char x[] = "Happy Birthday to You"; 13 char y[ 25 ]; 14 char z[ 15 ]; 15 16 strcpy( y, x ); // copy contents of x into y 17 18 cout 4 5 using std::cout; 6 using std::endl; 7 8 #include // prototypes for strcat and strncat 9 10 int main() 11 { 12 char s1[ 20 ] = "Happy "; 13 char s2[] = "New Year "; 14 char s3[ 40 ] = ""; 15 16 cout 4 5 using std::cout; 6 using std::endl; 7 8 #include 9 10 using std::setw; 11 12 #include // prototypes for strcmp and strncmp 13 14 int main() 15 { 16 char *s1 = "Happy New Year"; 17 char *s2 = "Happy New Year"; 18 char *s3 = "Happy Holidays"; 19 20 cout 4 5 using std::cout; 6 using std::endl; 7 8 #include // prototype for strtok 9 10 int main() 11 { 12 char sentence[] = "This is a sentence with 7 tokens"; 13 char *tokenPtr; 14 15 cout 4 5 using std::cout; 6 using std::endl; 7 8 #include // prototype for strlen 9 10 int main() 11 { 12 char *string1 = "abcdefghijklmnopqrstuvwxyz"; 13 char *string2 = "four"; 14 char *string3 = "Boston"; 15 16 cout << "The length of \"" << string1 17 << "\" is " << strlen( string1 ) 18 << "\nThe length of \"" << string2 19 << "\" is " << strlen( string2 ) 20 << "\nThe length of \"" << string3 21 << "\" is " << strlen( string3 ) << endl; 22 23 return 0; // indicates successful termination 24 25 } // end main The length of "abcdefghijklmnopqrstuvwxyz" is 26 The length of "four" is 4 The length of "Boston" is 6 

File đính kèm:

  • pptBài giảng Ngôn ngữ lập trình C++ - Chương 5 Con trỏ và xâu ký tự.ppt