Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 58 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
58
Dung lượng
1,04 MB
Nội dung
KỸ THUẬT LẬP TRÌNH CƠ BẢN Khoa Cơng nghệ thơng tin Trường Đại học Ngoại ngữ - Tin học TP.HCM (HUFLIT) KỸ THUẬT XỬ LÝ CHUỖI Biểu diễn ký tự • Character (ký tự): đơn vị thông tin thường tương ứng với ký hiệu đồ họa (symbol) • Ký tự đồ họa (ký tự in ) • Leters: 𝑎, 𝑏, 𝑐, … Khơng có • Numbers: 0, 1, 2, … symbol • Dấu câu, khoảng trắng (space) • Ký tự điều khiển (control character): tab, carriage return, … • Biểu diễn ký tự (character representation) máy tính • Mỗi ký tự biểu diễn số (code) (quá trình gọi mã hóa ký tự - character encoding) Biểu diễn ký tự • Character encoding • ASCII • Unicode •… • ASCII • Chuẩn character encoding (1963) • Dùng cho tiếng Anh • Dùng 𝑏𝑖𝑡𝑠, biểu diễn cho 128 ký tự (1 bit để kiểm tra lỗi) Biểu diễn ký tự - Ký tự điều khiển Hệ (Nhị phân) Hệ 10 (Thập phân) Hệ 16 (Thập lục phân) Viết tắt 000 0000 000 0001 000 0010 000 0011 000 0100 000 0101 000 0110 000 0111 000 1000 000 1001 000 1010 000 1011 000 1100 000 1101 000 1110 000 1111 001 0000 10 11 12 13 14 15 16 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE ␀ ␁ ␂ ␃ ␄ ␅ ␆ ␇ ␈ ␉ ␊ ␋ ␌ ␍ ␎ ␏ ␐ ^@ ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O ^P Null character Start of Header Start of Text End of Text End of Transmission Enquiry Acknowledgement Bell Backspace Horizontal Tab New Line, Line Feed Vertical Tab Form feed Carriage return Shift Out Shift In Data Link Escape 001 0001 17 11 DC1 ␑ ^Q Device Control — oft XON 001 0010 18 12 DC2 ␒ ^R Device Control 001 0011 19 13 DC3 ␓ ^S Device Control — oft XOFF 001 0100 20 14 DC4 ␔ ^T Device Control 001 0101 21 15 NAK ␕ ^U Negative Acknowledgement SYN ETB CAN EM SUB ESC FS GS RS US DEL ␖ ␗ ␘ ␙ ␚ ␛ ␜ ␝ ␞ ␟ ␡ ^V ^W ^X ^Y ^Z ^[ hay ESC ^\ ^] ^^ ^_ DEL Synchronous Idle End of Trans Block Cancel End of Medium Substitute Escape File Separator Group Separator Record Separator Unit Separator Delete 001 0110 001 0111 001 1000 001 1001 001 1010 001 1011 001 1100 001 1101 001 1110 001 1111 111 1111 22 23 24 25 26 27 28 29 30 31 127 16 17 18 19 1A 1B 1C 1D 1E 1F 7F Biểu diễn in Truy nhập bàn phím Tên/Ý nghĩa tiếng Anh Tên/Ý nghĩa tiếng Việt Ký tự rỗng Bắt đầu Header Bắt đầu văn Kết thúc văn Kết thúc truyền Truy vấn Sự cơng nhận Tiếng kêu Xố ngược Thẻ ngang Dòng Thẻ dọc Cấp giấy Chuyển dòng/ Xuống dòng Ngồi mã Mã hóa/Trong mã Thốt liên kết liệu Nhóm Separator Xóa Biểu diễn ký tự - Ký tự hiển thị Hệ (Nhị phân) Hệ 10 (Thập phân) Hệ 16 (Thập lục phân) Đồ hoạ (Hiển thị được) 010 0000 32 20 Khoảng trống (␠) 010 0001 33 21 ! 010 0010 34 22 " 010 0011 35 23 # 010 0100 36 24 $ 010 0101 37 25 % 010 0110 38 26 & 010 0111 39 27 ' 010 1000 40 28 ( 010 1001 41 29 ) 010 1010 42 2A * 010 1011 43 2B + 010 1100 44 2C , 010 1101 45 2D - 010 1110 46 2E 010 1111 47 2F / Biểu diễn ký tự - Ký tự hiển thị Hệ (Nhị phân) 011 0000 011 0001 011 0010 011 0011 011 0100 011 0101 011 0110 011 0111 011 1000 011 1001 011 1010 011 1011 011 1100 011 1101 011 1110 011 1111 100 0000 Hệ 10 (Thập phân) 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 Hệ 16 (Thập lục phân) 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 Đồ hoạ (Hiển thị được) : ; < = > ? @ Biểu diễn ký tự - Ký tự hiển thị Hệ (Nhị phân) 100 0001 100 0010 100 0011 100 0100 100 0101 100 0110 100 0111 100 1000 100 1001 100 1010 100 1011 100 1100 100 1101 100 1110 100 1111 101 0000 101 0001 101 0010 101 0011 101 0100 101 0101 101 0110 101 0111 101 1000 101 1001 101 1010 101 1011 101 1100 101 1101 101 1110 101 1111 110 0000 Hệ 10 (Thập phân) 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 Hệ 16 (Thập lục phân) 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 Đồ hoạ (Hiển thị được) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` Biểu diễn ký tự - Ký tự hiển thị Hệ (Nhị phân) 110 0001 110 0010 110 0011 110 0100 110 0101 110 0110 110 0111 110 1000 110 1001 110 1010 110 1011 110 1100 110 1101 110 1110 110 1111 111 0000 111 0001 111 0010 111 0011 111 0100 111 0101 111 0110 111 0111 111 1000 111 1001 111 1010 111 1011 111 1100 111 1101 111 1110 Hệ 10 (Thập phân) 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 Hệ 16 (Thập lục phân) 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E Đồ hoạ (Hiển thị được) a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ Biểu diễn ký tự • Unicode • Chuẩn quốc tế (1991) • Dùng cho ngơn ngữ • UTF-8 encoding • byte cho 128 ký tự theo định danh theo ASCII • Dùng đến byte cho ký tự khác • UTF-16 encoding: dùng đến bytes để biểu diễn ký tự • UTF-32 encoding: dùng bytes cho ký tự • Ngôn ngữ C# hỗ trợ mặc định UTF-16 encoding 10 Lấy Chuỗi • Dùng hàm Substring(…) string str = “VuiHocLapTrinh”; string substr1 = str.Substring(0,6); // substr1 = “VuiHoc” string substr2 = str.Substring(6); // substr2 = “LapTrinh” 44 Tìm kiếm Chuỗi • Dùng hàm IndexOf(…), LastIndexOf() string s = "Truong Dai hoc Ngoai ngu - Tin hoc TP.HCM"; int a = s.IndexOf("hoc"); // a = 11 int b= s.LastIndexOf("hoc"); // b = 31 45 Sao chép Chuỗi • Dùng hàm Copy(…) string str1 = "abc"; string str2 = "xyz"; Console.WriteLine("str1 = '{0}'", str1); Console.WriteLine("str2 = '{0}'", str2); Console.WriteLine("\nAfter String.Copy "); str2 = String.Copy(str1); Console.WriteLine("str1 = '{0}'", str1); Console.WriteLine("str2 = '{0}'", str2); // str1 = 'abc' Console.WriteLine("ReferenceEquals://{0}", str2 = 'xyz' Object.ReferenceEquals(str1, str2)); // Console.WriteLine("Equals: {0}", Object.Equals(str1, // After String.Copy str2)); // str1 = 'abc' // str2 = 'abc' // ReferenceEquals: False // Equals: True 46 Sao chép Chuỗi • Dùng toán tử gán “= ” string str1 = "abc"; string str2 = "xyz"; Console.WriteLine("str1 = '{0}'", str1); Console.WriteLine("str2 = '{0}'", str2); Console.WriteLine("\nAfter Assignment "); str2 = str1; Console.WriteLine("str1 = '{0}'", str1); Console.WriteLine("str2 = '{0}'", str2); // str1 = 'abc' Console.WriteLine("ReferenceEquals://{0}", str2 = 'xyz' Object.ReferenceEquals(str1, str2)); // Console.WriteLine("Equals: {0}", Object.Equals(str1, // After Assignment str2)); // str1 = 'abc' // str2 = 'abc' // ReferenceEquals: True // Equals: True 47 Sao chép Chuỗi Hàm Copy(…) string str1 = "abc"; string str2; str2 = String.Copy(str1); str1 “abc” Toán tử gán “=” string str1 = "abc"; string str2; str2 = str1; str1 “abc” str2 “abc” String.Copy(str1) str2 str2 = str1 Vận dụng • Bài toán "Tách họ tên" • Cho chuỗi 𝑠 chứa họ tên người Hãy viết chương trình tách họ, tên, tên lót chuỗi 𝑠 • Input • Dịng chứa chuỗi 𝑠 • Output • Dòng chứa họ • Dòng thứ hai chứa tên lót • Dịng thứ ba chứa tên Input Nguyễn Ngọc Phương Trinh Output Nguyễn Ngọc Phương Trinh 49 StringBuilder • StringBuilder: dùng để biểu diễn chuỗi thay đổi • Cơ chế bên • Danh sách liên kết • Mỗi node mảng ký tự char[] StringBuilder nameVariable; nameVariable = new StringBuilder(); nameVariable = new StringBuilder(" "); 50 StringBuilder • Chuyển string → StringBuilder string s; StringBuilder sb; sb = new StringBuilder(s); • Chuyển StringBuilder → string string s; StringBuilder sb; s = sb.ToString(); 51 Thao tác StringBuilder Mô tả Property Length Get số ký tự đối tượng chuỗi Chars[int] Property Get phần tử vị trí 𝑂(𝑚) với 𝑚 số node StringBuilder Mô tả Method Append(value) Thêm value vào cuối StringBuilder AppendLine(value) Thêm value vào dòng Insert(index, value) Chèn thêm value vào vị trí index Remove(startIndex, length) Xóa số ký tự Replace(oldValue, newValue) Thay oldValue newValue 52 Chọn lựa biểu diễn chuỗi • Có loại biểu diễn string C# • string • StringBuilder • StringBuffer (Sinh viên tự tìm hiểu thêm) • Chọn lựa loại biểu diễn? • Nếu chuỗi không thay đổi → dùng string • Nếu chuỗi thay đổi • Nếu dùng thread → dùng StringBuilder • Nếu dùng nhiều threads → dùng StringBuffer 53 Vận dụng • Bài tốn "Cộng hai số vơ lớn" • Để tính tốn (cộng, trừ, nhân, chia) số có hàng ngàn, hàng triệu chữ số khơng thể sử dụng kiểu liệu int, double Một giải pháp khả thi lưu trữ số lớn vào chuỗi, số chuỗi, sau viết thuật tốn mơ cách người thực phép tốn chuỗi • u cầu: cho hai số nguyên dương lớn lưu hai chuỗi 𝑠1 , 𝑠2 Hãy viết chương trình tính tổng hai số 𝑠1 , 𝑠2 54 Vận dụng • Bước Thêm số vào đầu chuỗi chuỗi có độ dài ngắn cho chuỗi có độ dài 123456 123456 876 000876 • Bước Thực phép cộng chữ số từ phải sang trái, ý cộng phát sinh giá trị nhớ cho số kế bên 123456 000876 Nhớ = -2 • Bước Sau cộng cịn nhớ phải thêm nhớ vào đầu chuỗi kết 55 Vận dụng • Bài tốn "Từ điển Việt - Anh" • Viết chương trình tra từ điển từ tiếng Việt sang tiếng Anh Khi người dùng nhập từ tiếng Việt, chương trình cho biết từ tiếng Anh tương ứng • Ví dụ • sách → policy • hiếu học → to be studious, love studying • tiến → improvement, progress 56 Vận dụng • Input Cho file liệu từ điển Việt-Anh có tên vnedict.txt Địa download: https://goo.gl/nn5Pi8 • Dịng chứa thơng tin từ điển • Dịng thứ hai trở chứa liệu theo cấu trúc tiếng Việt:tiếng Anh 57 Vận dụng • Output 58