Bài giảng Nhập môn lập trình - Chương 6: Mảng một chiều, chuỗi - Ngô Hữu Dũng

Đặt vấn đề

 Cần lưu trữ 10, 100, 1000 số cùng kiểu dữ liệu?

 Giải pháp

 Kiểu dữ liệu mảng cho phép lưu trữ một dãy các số đồng dạng.

 Ví dụ

 int a[10];

 Tạo ra một dãy số nguyên gồm 10 phần tử

pdf72 trang | Chia sẻ: phuongt97 | Lượt xem: 455 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Nhập môn lập trình - Chương 6: Mảng một chiều, chuỗi - Ngô Hữu Dũng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ể thay đổi giá trị của chuỗi?  Dùng các hàm xử lý chuỗi như scanf, gets  Thay đổi từng phần tử  Các hàm trong thư viện string.h  Tự viết hàm xử lý chuỗi ký tự 56 Nhập chuỗi từ bàn phím Nhập môn lập trình - Mảng, chuỗi  Dùng hàm scanf trong thư viện stdio.h  scanf("%s",name);  Nhập "My name is C", name = "My"  scanf("%[^\n]s",name);  Nhập "My name is C", name = "My name is C"  scanf tự động thêm ký tự NULL vào sau chuỗi nhận được từ bàn phím  Dùng hàm gets trong thư viện stdio.h  gets(name);  Hàm gets tự động chấp nhận chuỗi có khoảng trắng 57 Phần tử của chuỗi Nhập môn lập trình - Mảng, chuỗi  Phép khởi tạo char hello[] = "Hello!";  hello[0] = 'H', hello[1] = 'e', hello[2] = 'l', hello[6] = '\0'  Phép gán sau đó hello = "Hi!"; sẽ bị báo lỗi!  Có thể thay thế phép gán trên bằng các lệnh:  hello[0] = 'H';  hello[1] = 'i';  hello[2] = '!';  hello[3] = '\0';  Xuất chuỗi: printf("%s", hello);  printf("%s", "e"); // "e"= {'e', '\0'}  Xuất ký tự: printf("%c", hello[1]);  printf("%c", 'e'); hello[0] hello[1] hello[2] hello[3] hello[4] hello[5] hello[6] 'H' 'e' 'l' 'l' 'o' '!' '\0' 58 Thư viện string.h Nhập môn lập trình - Mảng, chuỗi  size_t strlen(const char * str)  Trả về chiều dài của chuỗi ký tự str  strlen(“hello”) = 5, strlen(hello) = 6  size_t: Unsigned integral type  const char: Bởi hàm không thay đổi giá trị của str  char * strcpy(char * destination, const char * source)  Chép nội dung chuỗi source sang chuỗi destination bao gồm ký tự NULL  Chuỗi destination phải đủ chứa chuỗi source (bao gồm ký tự NULL)  Bản thân hàm trả về destination  strcpy(hello, “Hi!”) trả về chuỗi “Hi!” và hello = “Hi!”  char * destination: Hàm thay đổi giá trị của destination  const char * source: Hàm không thay đổi giá trị của source 59 Thư viện string.h (2) Nhập môn lập trình - Mảng, chuỗi  int strcmp( const char * str1, const char * str2 )  So sánh chuỗi str1 với chuỗi str2, so sánh từng ký tự từ đầu đến khi phát hiện điểm khác nhau hoặc đến cuối chuỗi (‘\0’)  Giá trị trả về >0: str1 > str2  Giá trị trả về =0: str1 = str2  Giá trị trả về <0: str1 < str2  char * strcat( char * destination, const char * source )  Nối chuỗi source vào cuối chuỗi destination  destination phải đủ chứa chuỗi kết quả (bao gồm ký tự NULL)  char name[10]; strcpy(name, hello); strcat(name, hi); // name = “Hello!Hi!” 60 Chuyển đổi giữa chuỗi và số Nhập môn lập trình - Mảng, chuỗi  Thư viện chứa các hàm chuyển đổi giữa chuỗi và số  int atoi (const char * str)  Chuyển chuỗi str sang số nguyên và trả về giá trị số nguyên  atoi("34.5 53") = 34  double atof (const char* str)  Chuyển đổi một chuỗi sang kiểu số thực và trả về số thực  atof("34.5 53") = 34.5  long int atol ( const char * str )  Chuyển đổi chuỗi sang kiểu long int (4 bytes)  long long int atoll ( const char * str )  Chuyển đổi chuỗi sang kiểu long long int (8 bytes) 61 Chiều dài của chuỗi Nhập môn lập trình - Mảng, chuỗi  Chiều dài của chuỗi được xác định dựa vào ký tự NULL, kết thúc chuỗi  Viết hàm tính chiều dài của chuỗi  Hàm có kiểu nguyên, trả về chiều dài của chuỗi (output)  Đối số của hàm là một chuỗi (input)  Mã giả:  Khai báo một biến đếm và khởi tạo giá trị 0  Duyệt và đếm các phần tử của chuỗi  Dừng đếm khi gặp ký tự ‘\0’  Trả về chiều dài của chuỗi dựa vào giá trị của biến đếm  Tương tự hàm strlen của thư viện string.h 62 Ví dụ tham khảo hàm tính chiều dài của chuỗi Nhập môn lập trình - Mảng, chuỗi 1. int stringLength(const char str[]) 2. { 3. int count = 0; 4. while (str[count] != '\0') 5. count++; 6. return count; 7. } 8. 9. int main() 10.{ 11. char hello[] = "Hello!"; printf("%d",stringLength(hello)); 12.} 63 Chép chuỗi Nhập môn lập trình - Mảng, chuỗi  Viết hàm chép nội dung của một chuỗi nguồn vào một chuỗi đích  Chuỗi đích sẽ mang giá trị của chuỗi nguồn (output)  Đối số của hàm là hai chuỗi, nguồn và đích (input)  Mã giả  Khai báo một biến chạy và khởi gán giá trị ban đầu  Duyệt từng phần tử của chuỗi nguồn  Gán giá trị của từng phần tử ở chuỗi nguồn sang chuỗi đích  Dừng sao chép khi gặp ký tự ‘\0’  Gán ký tự ‘\0’ vào cuối chuỗi đích  Tương tự lệnh strcpy của thư viện string.h  Hàm có kiểu trả về là void  Bạn có thể trả về chuỗi đích cho hàm nếu biết dùng con trỏ, pointer (sẽ học sau) 64 Ví dụ tham khảo hàm chép chuỗi Nhập môn lập trình - Mảng, chuỗi 1. void stringCopy(char str1[], const char str2[]) 2. { 3. int i=-1; 4. do{ 5. i++; 6. str1[i]=str2[i]; 7. }while (str2[i]!='\0'); 8. } 9. int main() 10.{ 11. char hello[10]; 12. stringCopy(hello,"Hello!"); 13. printf("%s",hello); 14.} 65 Nối chuỗi Nhập môn lập trình - Mảng, chuỗi  Viết hàm nối một chuỗi nguồn vào cuối một chuỗi đích  Chuỗi đích sẽ mang giá trị là kết quả của việc nối hai chuỗi  Đối số của hàm gồm hai chuỗi  Mã giả  Khai báo hai biến chạy và khởi gán giá trị ban đầu  Biến chạy cho chuỗi nguồn, bắt đầu từ đầu chuỗi nguồn  Biến chạy cho chuỗi đích, bắt đầu từ cuối chuỗi đích  Duyệt từng phần tử của chuỗi nguồn  Gán giá trị của các phần tử của chuỗi nguồn vào chuỗi đích  Dừng sao chép khi gặp ký tự NULL của chuỗi nguồn  Gán ký tự NULL vào chuỗi đích  Hàm tương tự như hàm strcpy trong thư viện string.h 66 Ví dụ tham khảo hàm nối chuỗi Nhập môn lập trình - Mảng, chuỗi 1. void stringAppend(char dest[], const char src[]) 2. { 3. int i = stringLength(dest)-1, j = -1; 4. do{ 5. i++;j++; 6. dest[i]=src[j]; 7. }while(src[j]!='\0'); 8. } 9. int main() 10.{ 11. char thanks[20] = "Thank"; 12. stringAppend(thanks, " you!"); 13. printf("%s",thanks); 14.} 67 So sánh chuỗi Nhập môn lập trình - Mảng, chuỗi  Viết hàm so sánh hai chuỗi ký tự str1 và str2  Hàm trả về giá trị  < 0 nếu str1 < str2  = 0 nếu str1 = str2  > 0 nếu str1 > str2  Hàm có 2 đối số là hai chuỗi cần so sánh  Mã giả  Khai báo và khởi tạo cho một biến chạy  Duyệt các phần tử cho đến khi  Gặp phần tử khác nhau  Hoặc kết thúc một trong hai chuỗi  So sánh phần tử cuối cùng và trả về giá trị so sánh tương ứng 68 Ví dụ tham khảo về hàm so sánh chuỗi Nhập môn lập trình - Mảng, chuỗi 1. int stringCompare(const char str1[], const char str2[]) 2. { 3. int i = 0; 4. while(str1[i]==str2[i]&&str1[i]!='\0'&&str2[i]!='\0') 5. i++; 6. if(str1[i]>str2[i]) 7. return 1; 8. else if (str1[i]<str2[i]) 9. return -1; 10. else 11. return 0; 12. }; 69 Tìm kiếm Nhập môn lập trình - Mảng, chuỗi  Viết hàm tìm kiếm vị trí của một chuỗi nguồn trong chuỗi đích  Hàm trả về số nguyên là vị trí đầu tiên tìm thấy  Hàm trả về số âm nếu không tìm thấy  Đối số của hàm là hai chuỗi  Mã giả?  ?  ?  ?  ? 70 Ví dụ tham khảo về tìm kiếm chuỗi Nhập môn lập trình - Mảng, chuỗi  Hoạt động?? 1. int stringSearch(const char str1[], const char str2[]) 2. { 3. int i=0, j=0; 4. while(str1[i]!='\0' && str2[j]!='\0') 5. { 6. if(str1[i+j]!=str2[j]) 7. { 8. i++; j=0; 9. } 10. else 11. j++; 12. if (str2[j]=='\0') 13. return i; 14. } 15. return -1; 16. } 71 Hết Nhập môn lập trình - Mảng, chuỗi  Khái niệm chuỗi  Khai báo, khởi tạo  Phần tử của chuỗi  Thư viện string.h  Thư viện stdlib.h  Một vài bài toán về chuỗi  Bài tập về nhà  Nhập vào họ và tên, đếm số ký tự alphabet  Ví dụ: Nhập “Tran Van An ”, xuất ra có 9 ký tự  Nhập vào một chuỗi, đếm số chữ  Ví dụ: Nhập “Day la mot chuoi ky tu”, xuất ra có 6 chữ  Nhập vào họ và tên, xuất ra họ, chữ đệm và tên  Ví dụ: Nhập “Tran Van An”, xuất ra họ Tran, chữ đệm Van, tên An  Nhập vào một số, xuất ra chữ viết của số đó  Ví dụ: Nhập 456, xuất ra: Bon tram nam muoi sau 72

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_nhap_mon_lap_trinh_chuong_6_mang_mot_chieu_chuoi_n.pdf
Tài liệu liên quan