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

Khởi tạo và gán giá trị Mảng 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

pptx55 trang | Chia sẻ: thanhle95 | Lượt xem: 530 | Lượt tải: 0download
Bạn đang xem trước 20 trang 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, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 2Xử lý mảng và chuỗiNội dungMảngCác thao tác trên mảngChuỗiCác thao tác trên chuỗiMảngLà tập hợp nhiều phần tử có cùng kiểu dữ liệuSố phần tử trong mảng được xác định trướcMỗi phần tử được đánh số chỉ mục, bắt đầu từ 0MảngMộ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ủMảngKhoaHệThốngThôngTin01234Mảng các từ:Mảng các số nguyên:4061128901234567Ví dụ về mảng:Khai báo MảngKiểuDữLiệu[] tênMảng;Ví dụint[] bangDiem;string[] loiNoi;DateTime[] ngaySinh;Khởi tạo MảngtenMang = new KieuDuLieu[soPhanTu]Ví dụdiem = new int[10];loiNoi = new string[20];ngaySinh = new DateTime[7];float diemTB = new float[5];0000001432Khởi tạo và gán giá trị MảngtenMang = 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áoTruy suất từng phần tử MảngXác định số phần tử của mảngtenMang.LengthTruy xuất phần tử: tenMang[soThuTu]0 tìm thấy. Nếu không đúng tìm đến phần tử kế tiếp i+1Nếu sau khi xét hết N phần tử mà không có giá trị khoá cần tìm  không tìm thấyTìm kiếm trên Mảng chưa sắp xếpGiải thuật tìm kiếm tuyến tínhBước 1: i = 0; // bắt đầu từ phần tử đầu tiên của dãy Bước 2: So sánh a[i] với x, có 2 khả năng : + a[i] = x : Tìm thấy. Dừng + a[i] ≠ x : Sang Bước 3. Bước 3 : i = i+1; // xét tiếp phần tử kế trong mảng Nếu i = N: Hết mảng,không tìm thấy.Dừng Ngược lại: Lặp lại Bước 2. Tìm kiếm trên Mảng chưa sắp xếpGiải thuật tìm kiếm tuyến tínhint TimKiem( int x){for (int i=0; i ds = new List();ds.Add("an");//thêm phần tửds.Add("bình");ds.Remove("an");//xóa phần tửds.Add("happy");foreach(string s in ds)//duyệt danh sách { Console.WriteLine(s); }ds.Clear();//xóa toàn bộ Kiểu ký tựLưu trữ ký tự Unicode 16-bitKiểu trong .NET frameword: System.CharMiền giá trị: [0, 65535]Cách khai báoKhai báo ký tựchar ch1 = 'a';Chuyển từ số nguyênchar ch2 = (char) 65; // Ký tự ‘A’Chú ý: Sử dụng dấu nháy đơn để khai báo kiểu charChuyể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ỗiSo sánh kiểu 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)So sánh kiểu ký tựEqualsTrue: nếu 2 ký tự bằng nhauFalse: nếu 2 ký tự không bằng nhauVí 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’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áiChar.IsNumeric(ch): True nếu ch là chữ số UnicodeChar.IsWhiteSpace(ch): True nếu ch là khoảng trắngChar.IsLower(ch): True nếu ch là chữ thườngChar.IsUpper(ch): True nếu ch là chữ hoaKiểm tra ký tựConsole.WriteLine(Char.IsDigit('1')); //TrueConsole.WriteLine(Char.IsDigit('½')); //FalseConsole.WriteLine(Char.IsNumber('½')); //TrueConsole.WriteLine(Char.IsNumber('2')); //TrueConsole.WriteLine(Char.IsLetter('1')); //FalseConsole.WriteLine(Char.IsLower('A')); //FalseConsole.WriteLine(Char.IsUpper('a')); //FalseConsole.WriteLine(Char.IsWhiteSpace(' ')); //TrueThao tác với ký tựChar.ToLower(char):Chuyển ký tự từ chữ hoa sang chữ thườngchar ch1 = 'A';Console.WriteLine(Char.ToLower(ch1));Kết quả: aChar.ToUpper(char):Chuyển ký tự từ chữ thường sang chữ hoachar ch1 = 'a';Console.WriteLine(Char.ToLower(ch1));Kết quả: AChuỗiMảng các ký tự thuộc kiểu charKiểu trong .NET framework: System.StringKhai báo chuỗistring 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";Chuyển đổi sang ChuỗiToString(): trả về chuỗi ứng với nội dung của biếnint i = 1;string str = i.ToString();Convert.ToString(obj)int i = 1;string str = Convert.ToString(i);Thao tác với ChuỗiToCharArray() hoặc []: Trả về mảng các ký tự trong chuỗistring str1 = "Hello";//Tra ve ky tu echar 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 = 4Các hàm xử lý ChuỗiTên hàmMô tảint CompareTo( string value) Nội dung : So sánh chuỗi đang xét với chuỗi value. Trả về 0 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( string value) Nội dung : Trả về True nếu trong chuỗi đang xét có chứa 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");Các hàm xử lý Chuỗivoid CopyTo( int sourceIndex, char[] destination, int destinationIndex, int count) Nội dung : Copy count ký tự bắt đầu từ vị trí sourceIndex trong chuỗi vào mảng ký tự destination bắt đầu tại vị trí destinationIndex.Ví dụ : string s = "hello"; 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( string value) Nội dung : Trả về True nếu chuỗi value là chuỗi con kết 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");Các hàm xử lý Chuỗistatic string Format( string format, Object arg0, Object arg1, Object arg2) Nội dung : Trả về chuỗi được xây dựng từ chuỗi FormatStr bằng cách thay thế các vị trí {:} trong FormatStr thành các giá trị value1, value2, tương ứng.Ví dụ : string s = "Hello"; 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); s = string.Format("{0:dd/MM/yyyy HH:mm:ss}", DateTime.Now); Console.WriteLine(s);Các hàm xử lý Chuỗibool Equals( string value) Nội dung : Trả về True nếu chuỗi đang xét bằng với chuỗi 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( int startIndex, string value) Nội dung : Trả về chuỗi mới được xây dựng từ chuỗi ban đầu bằng cách chèn vào chuỗi ban đầu tại vị trí startIndex chuỗi con value.Ví dụ : string s = "Hello !"; string val = "everybody"; //Trả về "Helloeverybody !" s = s.Insert(5, val); Console.WriteLine(s);int IndexOf( char/string value) Nội dung : Trả về vị trí xuất hiện đầu tiên của ký tự hoặc chuỗi value trong chuỗi. Trả về -1 nếu không tìm thấy. Các hàm xử lý Chuỗiint IndexOf( char/string value, int startIndex) Nội dung : Trả về vị trí xuất hiện đầu tiên của ký tự hoặc chuỗi value trong chuỗi kể từ vị trí startIndex. Trả về -1 nếu không tìm thấy.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( char/string value) Nội dung : Tương tự hàm IndexOf, nhưng trả về vị trí xuất hiện cuối cùng.int LastIndexOf( char/string value, int startIndex) Nội dung : Tương tự hàm IndexOf, nhưng trả về vị trí xuất hiện cuối cùng.Các hàm xử lý Chuỗistring PadLeft( int width) Nội dung : Trả về chuỗi đã được canh lề trái. Thao tác canh lề như sau: tạo chuỗi mới gồm width ký tự, đặt chuỗi ban đầu 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 PadLeft( int width, char ch) Nội dung : Tương tự hàm PadLeft ở trên, nhưng thay vì sử dụng các ký tự khoảng trắng, các ký tự ch sẽ được sử dụng.Ví dụ :string s = "Hello!";string s_leftaligned;// Trả về chuỗi "****Hello!"s_leftaligned = s.PadLeft(10, '*');Các hàm xử lý Chuỗistring PadRight( int width) Nội dung : Tương tự hàm PadLeft, nhưng canh lề phải.string PadRight( int width, char ch) Nội dung : Tương tự hàm PadLeft, nhưng canh lề phải.string Remove( int startIndex, int count) Nội dung : Trả về chuỗi được xây dựng bằng cách bỏ đi trong chuỗi ban đầu count ký tự bắt đầu từ vị trí startIndex.Ví dụ : string s = "Hello!!!"; // Trả về chuỗi "Hell!" s = s.Remove(4, 3); string Replace( string oldStr, string newStr) Nội dung : Trả về chuỗi được xây dựng bằng cách thay thế các chuỗi con oldStr trong chuỗi ban đầu bằng các chuỗi con newStr.Ví dụ : string s = "Hello"; // Trả về chuỗi "Hero"; s = s.Replace("ll", "r");Các hàm xử lý Chuỗibool StartsWith(string value) Nội dung : Ngược lại với hàm EndsWithstring Substring(int startIdx, int count) Nội dung : Trả về chuỗi con trong chuỗi ban đầ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); Các hàm xử lý Chuỗistring 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.Các hàm xử lý Chuỗistring[] Split (params char[] separator) Nội dung: Trả về mảng các chuỗi con được phân cách bởi separatorVí dụ : string str = "mot,hai,ba"; //Tra ve mang gom {"mot", "hai", "ba"} string[] str2 = str.Split(','); Console.WriteLine(str2[1]);static string Join (string separator, string[] value) Nội dung: Nối các chuỗi trong mảng value thành 1 chuỗi, phân cách bởi separatorVí dụ :string[] mang = new string[3];mang[0] = "mot";mang[1] = "hai";mang[2] = "ba";//Tra ve chuoi "mot*hai*ba"string str = string.Join("*", mang);END