Bài giảng Kỹ thuật lập trình - Chương 2: Xử lý mảng và chuỗi

pptx 35 trang phuongnguyen 2100
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 2: Xử lý mảng và chuỗi", để 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:

  • pptxbai_giang_ky_thuat_lap_trinh_chuong_2_xu_ly_mang_va_chuoi.pptx

Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 2: Xử lý mảng và chuỗi

  1. Chương 2 Xử lý mảng và chuỗi
  2. Nội dung ❖Mảng ❖Các thao tác trên mảng ❖Chuỗi ❖Các thao tác trên chuỗi
  3. Mảng ❖Là tập hợp nhiều phần tử có cùng kiểu dữ liệu ❖Số phần tử trong mảng được xác định trước ❖Mỗi phần tử được đánh số chỉ mục, bắt đầu từ 0
  4. Hình ảnh Một phòng chứa các tủ ❖Số lượng tủ chứa ? ❖Tủ Chứa gì? ❖Số thứ tự tủ, chỉ mục tủ
  5. Ví dụ mảng Mảng các từ Khoa Tin Học Quản Lý 0 1 2 3 4 Mảng các số nguyên 0 1 2 3 4 5 6 7
  6. Khai báo mảng ❖KiểuDữLiệu[] tênMảng; ❖Ví dụ ▪ int[] bangDiem; ▪ string[] loiNoi; ▪ DateTime[] ngaySinh;
  7. Khởi tạo mảng ❖tenMang = new KieuDuLieu[soPhanTu] ❖Ví dụ ▪ diem = new int[10]; ▪ loiNoi = new string[20]; ▪ ngaySinh = new DateTime[7]; ▪ float diemTB = new float[5]; 0 0 0 0 0 0 1 2 3 4
  8. Khởi tạo và gán giá trị ❖tenMang = new KieuDuLieu[spt]{gtri1, gtri2, gtri3, }; ▪ diem = new int[5]{ 5, 6, 7, 6, 9 } ❖Giá trị không nhất thiết phải là hằng số ▪ Ví dụ Random r = new Random(); int[] pins = new int[4]{ r.Next() % 10, r.Next() % 10, r.Next() % 10, r.Next() % 10 }; ❖Số giá trị trong dấu ngoặc phải bằng số phần tử mảng được khai báo
  9. Truy xuất từng phần tử mảng ❖Xác định số phần tử của mảng ▪ tenMang.Length ❖Truy xuất phần tử: tenMang[soThuTu] ▪ 0 <= soThuTu <= (tenMang.Length – 1) ❖Ví dụ ▪ Lấy điểm thứ 3 (soThuTu = 2) của mảng diem int diem3 = diem[2]; → diem3 = 7 5 6 7 6 9 0 1 2 3 4
  10. Gán giá trị cho phần tử mảng ❖Gán điểm thứ 3 của mảng diem là 10 ▪ diem[2] = 10 5 6 10 6 9 0 1 2 3 4 ❖Gán điểm thứ 4 của mảng diem bằng điểm thứ nhất cộng 4 ▪ diem[3] = diem[0] + 4 5 6 10 9 9 0 1 2 3 4
  11. Duyệt mảng ❖Dùng vòng lặp for ❖Ví dụ duyệt mảng diem for (int i = 0; i < diem.Length; i++) { Console.WriteLine(diem[i].ToString()); } ❖Duyệt và gán phần tử for (int i = 0; i < diem.Length; i++) { diem[i] += 1; Console.WriteLine(diem[i].ToString()); }
  12. Duyệt mảng bằng foreach ❖Ví dụ foreach (int i in diem) { Console.WriteLine(i.ToString()); } ❖Không nên dùng foreach khi ▪ Cần duyệt một phần trong mảng (ví dụ duyệt từ phần tử thứ 2 tới thứ 10) ▪ Cần duyệt từ cuối về đầu mảng ▪ Cần biết chỉ số mảng trong vòng lặp ▪ Cần thay đổi giá trị của phần tử mảng
  13. Sao chép mảng ❖Mảng là kiểu tham chiếu → gán mảng là gán tham chiếu ❖Ví dụ ▪ int[] mangA = diem; ▪ → mangA và diem cùng tham chiếu đến vùng nhớ chứa các phần tử của mảng ▪ Thay đổi giá trị trong mangA sẽ ảnh hưởng đến diem
  14. Sao chép mảng diem 5 6 7 6 9 mangA diem 5 6 8 6 9 mangA
  15. Sao chép mảng ❖Tạo mảng mới và gán giá trị từ mảng cũ ❖Dùng CopyTo ▪ int[] mangA = new int[diem.Length]; ▪ diem.CopyTo(mangA, 0); ❖Dùng Array.Copy ▪ Array.Copy(diem, mangA, diem.Length); ❖Dùng Clone ▪ mangA = (int[]) diem.Clone();
  16. Kiểu ký tự ❖Lưu trữ ký tự Unicode 16-bit ❖Kiểu trong .NET frameword: System.Char ❖Miền giá trị: [0, 65535] ❖Cách khai báo ▪ Khai báo ký tự • char ch1 = 'a'; ▪ Chuyển từ số nguyên • char ch2 = (char) 65; // Ký tự ‘A’ ▪ Chú ý: • Sử dụng dấu nháy đơn để khai báo kiểu char
  17. Chuyển đổi kiểu ký tự ❖char.Parse(string) ❖Convert.ToChar(string) ❖Chú ý: Chuỗi đưa vào chuyển đổi chỉ có 1 ký tự. ▪ char ch1 = Convert.ToChar("a"); // ch1 = ‘a’ ▪ char ch1 = Convert.ToChar("aa"); // báo lỗi
  18. So sánh ký tự ❖Compare: ▪ So sánh 2 ký tự, trả về hiệu số giữa ký tự so sánh và ký tự được so sánh. ▪ Ví dụ: char ch1 = 'A'; char ch2 = 'B'; Console.WriteLine(ch1.CompareTo(ch2)); ▪ Kết quả: -1 (ký tự ch1 nhỏ hơn 1 so với ký tự ch2)
  19. So sánh ký tự ❖Equals ▪ True: nếu 2 ký tự bằng nhau ▪ False: nếu 2 ký tự không bằng nhau ❖Ví dụ char ch1 = 'A'; char ch2 = (char)65; char ch3 = 'B'; Console.WriteLine(ch1.Equals(ch2)); //Kết quả ‘True’ Console.WriteLine(ch1.Equals(ch3)); //Kết quả ‘False’
  20. Kiểm tra ký tự ❖Char.IsDigit(ch): True nếu ch là chữ số ❖Char.IsLetter(ch): True nếu ch là chữ cái ❖Char.IsNumeric(ch): True nếu ch là chữ số Unicode ❖Char.IsWhiteSpace(ch): True nếu ch là khoảng trắng ❖Char.IsLower(ch): True nếu ch là chữ thường ❖Char.IsUpper(ch): True nếu ch là chữ hoa
  21. Kiểm tra ký tự ❖Console.WriteLine(Char.IsDigit('1')); //True ❖Console.WriteLine(Char.IsDigit('½')); //False ❖Console.WriteLine(Char.IsNumber('½')); //True ❖Console.WriteLine(Char.IsNumber('2')); //True ❖Console.WriteLine(Char.IsLetter('1')); //False ❖Console.WriteLine(Char.IsLower('A')); //False ❖Console.WriteLine(Char.IsUpper('a')); //False ❖Console.WriteLine(Char.IsWhiteSpace(' ')); //True
  22. Thao tác với ký tự ❖Char.ToLower(char): ▪ Chuyển ký tự từ chữ hoa sang chữ thường ▪ char ch1 = 'A'; ▪ Console.WriteLine(Char.ToLower(ch1)); ▪ Kết quả: a ❖Char.ToUpper(char): ▪ Chuyển ký tự từ chữ thường sang chữ hoa ▪ char ch1 = 'a'; ▪ Console.WriteLine(Char.ToLower(ch1)); ▪ Kết quả: A
  23. Chuỗi ❖Mảng các ký tự thuộc kiểu char ❖Kiểu trong .NET framework: System.String ❖Khai báo chuỗi ▪ string str = "Text"; ❖Chuỗi với ký tự đặc biệt (escape character) ▪ Tab: "\t" ▪ Xuống hàng: "\n" ▪ Backslash: "\\" ❖Khai báo nguyên văn: thêm dấu ‘@’ ▪ string str2 = @"C:\Windows";
  24. Chuyển đổi sang chuỗi ❖ToString(): trả về chuỗi ứng với nội dung của biến ▪ int i = 1; ▪ string str = i.ToString(); ❖Convert.ToString(obj) ▪ int i = 1; ▪ string str = Convert.ToString(i);
  25. Thao tác với chuỗi ❖ToCharArray() hoặc []: Trả về mảng các ký tự trong chuỗi string str1 = "Hello"; //Tra ve ky tu e char ch1 = str1.ToCharArray()[1]; Console.WriteLine(ch1); ❖Length: Trả về độ dài chuỗi (số ký tự) ▪ string str1 = "Text"; ▪ int i = str1.Length; //i = 4
  26. Các hàm xử lý chuỗi Tên hàm Mô tả int CompareTo( Nội dung : So sánh chuỗi đang xét với chuỗi value. Trả về 0 string value) nếu hai chuỗi bằng nhau, 1 nếu lớn hơn và -1 nếu nhỏ hơn. Ví dụ : string s = "Hello"; int i; // Trả về i = 1 i = s.CompareTo("hello"); // Trả về i = 0 i = s.CompareTo("Hello"); bool Contains( Nội dung : Trả về True nếu trong chuỗi đang xét có chứa string value) chuỗi value, trả về False nếu ngược lại. Ví dụ : string s = "Hello"; bool i; // Trả về True i = s.Constains("lo");
  27. Các hàm xử lý chuỗi void CopyTo( int Nội dung : Copy count ký tự bắt đầu từ vị trí sourceIndex sourceIndex, trong chuỗi vào mảng ký tự destination bắt đầu tại vị trí char[] destinationIndex. destination, int Ví dụ : destinationIndex string s = "hello"; , int count) char[] ch = new char[5]; ch[0] = 'a'; ch[1] = 'b'; s.CopyTo(1, ch, 2, 3); // Trả về mảng ký tự ch là "abell" Console.WriteLine(ch); bool EndsWith( Nội dung : Trả về True nếu chuỗi value là chuỗi con kết string value) thúc (nằm ở cuối) của chuỗi đang xét. Ví dụ : string s = "Hello"; bool b; // Trả về b = True b = s.EndsWith("lo");
  28. Các hàm xử lý chuỗi static string Nội dung : Trả về chuỗi được xây dựng từ chuỗi FormatStr bằng cách thay thế Format( string các vị trí { : } trong FormatStr thành các giá trị value1, format, Object value2, tương ứng. arg0, Object Ví dụ : arg1, Object string s = "Hello"; arg2) int n; n = 14; // "Giá trị n = 14.00, căn bậc 2 là 3.74" s = string.Format("Giá trị n = {0:N}, căn bậc 2 là {1:N}", n, Math.Sqrt(n)); Console.WriteLine(s); // "Giá thành sản phẩm = $200.00" s = string.Format("Giá thành sản phẩm = {0:C}", 200); Console.WriteLine(s); DateTime date = new DateTime(2011, 2, 2, 1, 1, 1, 511); // "Today is Monday, February 2, 2011" s = string.Format("Today is {0:D}", date); Console.WriteLine(s);
  29. Các hàm xử lý chuỗi bool Equals( Nội dung : Trả về True nếu chuỗi đang xét bằng với chuỗi value, string value) ngược lại trả về False. Ví dụ : string s = "Hello"; bool b; // Trả về b = True b = s.Equals("Hello"); string Insert( Nội dung : Trả về chuỗi mới được xây dựng từ chuỗi ban đầu int startIndex, bằng cách chèn vào chuỗi ban đầu tại vị trí startIndex chuỗi con string value) value. Ví dụ : string s = "Hello !"; string val = "everybody"; //Trả về "Helloeverybody !" s = s.Insert(5, val); Console.WriteLine(s); int IndexOf( Nội dung : Trả về vị trí xuất hiện đầu tiên của ký tự hoặc chuỗi char/string value trong chuỗi. Trả về -1 nếu không tìm thấy. value)
  30. Các hàm xử lý chuỗi int IndexOf( Nội dung : Trả về vị trí xuất hiện đầu tiên của ký tự hoặc chuỗi char/string value trong chuỗi kể từ vị trí startIndex. Trả về -1 nếu không tìm value, int thấy. startIndex) Ví dụ : string s = "Hello everybody !"; int i = 0; // Trả về i = 1 i = s.IndexOf("e"); // Trả về i = 6 i = s.IndexOf("e", i + 1); // Trả về i = 8 i = s.IndexOf("e", i + 1); int LastIndexOf( Nội dung : Tương tự hàm IndexOf, nhưng trả về vị trí xuất hiện char/string cuối cùng. value) int LastIndexOf( Nội dung : Tương tự hàm IndexOf, nhưng trả về vị trí xuất hiện char/string cuối cùng. value, int startIndex)
  31. Các hàm xử lý chuỗi string Nội dung : Trả về chuỗi đã được canh lề trái. Thao tác canh lề PadLeft( int như sau: tạo chuỗi mới gồm width ký tự, đặt chuỗi ban đầu width) vào bên phải chuỗi mới, các ký tự khoảng trắng sẽ được chen vào các vị trí còn trống bên trái trong chuỗi mới. Ví dụ : string s = "Hello!"; string s_leftaligned; // Trả về chuỗi " Hello!" s_leftaligned = s.PadLeft(10); Console.WriteLine(s_leftaligned); string Nội dung : Tương tự hàm PadLeft ở trên, nhưng thay vì sử PadLeft( int dụng các ký tự khoảng trắng, các ký tự ch sẽ được sử dụng. width, char Ví dụ : ch) string s = "Hello!"; string s_leftaligned; // Trả về chuỗi " Hello!" s_leftaligned = s.PadLeft(10, '*');
  32. Các hàm xử lý chuỗi string PadRight( int Nội dung : Tương tự hàm PadLeft, nhưng canh lề phải. width) string PadRight( int Nội dung : Tương tự hàm PadLeft, nhưng canh lề phải. width, char ch) string Remove( int Nội dung : Trả về chuỗi được xây dựng bằng cách bỏ đi startIndex, int trong chuỗi ban đầu count ký tự bắt đầu từ vị trí startIndex. count) Ví dụ : string s = "Hello!!!"; // Trả về chuỗi "Hell!" s = s.Remove(4, 3); string Replace( Nội dung : Trả về chuỗi được xây dựng bằng cách thay thế string oldStr, các chuỗi con oldStr trong chuỗi ban đầu bằng các chuỗi string newStr) con newStr. Ví dụ : string s = "Hello"; // Trả về chuỗi "Hero"; s = s.Replace("ll", "r");
  33. Các hàm xử lý chuỗi bool Nội dung : Ngược lại với hàm EndsWith StartsWith(string value) string Substring(int Nội dung : Trả về chuỗi con trong chuỗi ban startIdx, int count) đầu, bắt đầu từ vị trí startIdx và có độ dài count ký tự. Ví dụ : string s = "Hello"; // Trả về chuỗi "ell"; s = s.Substring(1, 3);
  34. Các hàm xử lý chuỗi string ToLower() Nội dung : Trả về chuỗi có kiểu chữ thường từ chuỗi ban đầu. string ToUpper() Nội dung : Trả về chuỗi có kiểu chữ hoa từ chuỗi ban đầu. string Trim() Nội dung : Trả về chuỗi mới sau khi bỏ đi các ký tự khoảng trắng ở đầu và cuối của chuỗi ban đầu. Tương tự hàm Trim trong thư viện hàm của VB.Net. string TrimEnd() Nội dung : Tương tự hàm Trim, nhưng chỉ bỏ đi các ký tự khoảng trắng ở cuối. string TrimStart() Nội dung : Tương tự hàm Trim, nhưng chỉ bỏ đi các ký tự khoảng trắng ở đầu.
  35. Các hàm xử lý chuỗi string[] Split Nội dung: Trả về mảng các chuỗi con được phân cách (params char[] bởi separator separator) Ví dụ : string str = "mot,hai,ba"; //Tra ve mang gom {"mot", "hai", "ba"} string[] str2 = str.Split(','); Console.WriteLine(str2[1]); static string Nội dung: Nối các chuỗi trong mảng value thành 1 chuỗi, Join (string phân cách bởi separator separator, Ví dụ : string[] string[] mang = new string[3]; value) mang[0] = "mot"; mang[1] = "hai"; mang[2] = "ba"; //Tra ve chuoi "mot*hai*ba" string str = string.Join("*", mang);