Bài giảng Kỹ thuật lập trình C - Chương 2: Xử lý mảng và chuỗi cung cấp cho người học các kiến thức: Mảng, các thao tác trên mảng, chuỗi, các thao tác trên chuỗi. Đây là một tài liệu hữu ích dành cho các bạn sinh viên ngành Công nghệ thông tin và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.
Trang 1Chương 2
Trang 3M ngả
v Là t p h p nhi u ph n t có cùng ki u d ậ ợ ề ầ ử ể ữ
li u ệ
v S ph n t trong m ng đ ố ầ ử ả ượ c xác đ nh tr ị ướ c
v M i ph n t đ ỗ ầ ử ượ c đánh s ch m c, b t đ u ố ỉ ụ ắ ầ
t 0 ừ
Trang 8v S giá tr trong d u ngo c ph i b ng s ố ị ấ ặ ả ằ ố
Trang 16Đ o M ngả ả
Phương th c ứ Reverse cua l p ̉ ớ Array th c hiên viêc ự ̣ ̣đao th t ca c phâ n t trong mang. Cu pha p th c ̉ ư ự́ ́ ̀ ử ̉ ́ ́ ựhiên: ̣
int[] mang = { 15, 26, 7, 28, 19, 6 };
Array.Reverse(mang);
K t qu : ế ả
mang = { 6,19,28,7,26,15};
Trang 17S p x p M ngắ ế ả
Phương th c ứ Sort() cua l p ̉ ớ Array th c hiên viêc să p ự ̣ ̣ ́
xê p ca c phâ n t trong mang. Cu pha p th c hiên: ́ ́ ̀ ử ̉ ́ ́ ự ̣
Trang 18Tìm ki m trên M ngế ả
0 2 5 6 7 8 9
5 2 9 7 6 0 8
9 8 7 6 5 2 0
Trang 19Tìm ki m trên M ngế ả
Ph ươ ng th c ư ́ BinarySearch cua l p ̉ ơ ́ Array th c ự hiên viêc ti m kiê m môt gia tri trong môt mang ̣ ̣ ̀ ́ ̣ ́ ̣ ̣ ̉
đa đ ̃ ượ c să p xê p tr ́ ́ ươ ́ c, tra vê kê t qua la ̉ ̀ ́ ̉ ̀
sô nguyên cho biê t chi sô index cua phâ n t ́ ́ ̉ ́ ̉ ̀ ử
ti m đ ̀ ượ c , nê u không ti m đ ́ ̀ ượ c thi tra vê 1 ̀ ̉ ̀
Cu pha p th c hiên: ́ ́ ự ̣
Trang 21Tìm ki m trên M ng ch a s p x pế ả ư ắ ế
v Gi i pháp 1: ả S p x p m ng tr ắ ế ả ướ c, sau đó g i ọ hàm tìm ki m nh phân(đ n gi n, tuy nhiên ế ị ơ ả
gi i thu t tìm ki m tuy n tính ả ậ ế ế
Trang 22Tìm ki m trên M ng ch a s p x pế ả ư ắ ế
v Gi i thu t tìm ki m tuy n tính ả ậ ế ế
Xét ph n t t đ u cho đ n cu i m t cách tu n tầ ử ừ ầ ế ố ộ ầ ự
T i v trí thạ ị ứ i n u giá tr trong d li u đúng v i ế ị ữ ệ ớ
khoá c n tìm ki m > tìm th y. N u không đúng tìm ầ ế ấ ế
đ n ph n t k ti p ế ầ ử ế ế i+1
N 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 yấ
Trang 23Tìm ki m trên M ng ch a s p x pế ả ư ắ ế
v Gi i thu t tìm ki m tuy n tính ả ậ ế ế
• Bướ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.
Trang 24Tìm ki m trên M ng ch a s p x pế ả ư ắ ế
v Gi i thu t tìm ki m tuy n tính ả ậ ế ế
int TimKiem( int x){
for (int i=0; i<N;i++) {
if (a[i]==x) return i ; // a[i] là ph n t có khoá x ầ ử
};
return 1;// tìm h t m ng nh ng không có x ế ả ư
}
Trang 25Tìm ki m trên M ng ch a s p x pế ả ư ắ ế
Trang 26Tìm ki m trên M ng ch a s p x pế ả ư ắ ế
Trang 27Ø C# h tr m ng đa chi u, đây ta xét m ng 2 ỗ ợ ả ề ở ả
chi u vì nó ph bi n nh t.ề ổ ế ấ
Ø M ng hai chi u th c ch t là m ng c a nh ng ả ề ự ấ ả ủ ữ
m ng m t chi u. Ta có th xem m ng hai chi u là ả ộ ề ể ả ề
m t ma tr n g m các hàng và các c tộ ậ ồ ộ
Trang 29M ng đa chi uả ề
Ø Cú pháp khai báo:
Kiêu_d _liêủ ữ ̣ [ , ] mang =
new Kiêu_d _liêủ ữ ̣ [so_hang, so_cot];
Ø Ví d :ụ
T o m ng 2 chi u có 3 dòng 5 c t:ạ ả ề ộ
int[ , ] mang = new int[3, 5];
Ø Đê truy câp phâ n t trong mang hai chiê u, ta s ̉ ̣ ̀ ử ̉ ̀ ử
dung index dang̣ ̣ tenMang [ vi tri do ng ̣ ́ ̀ , vi tri côt ̣ ́ ̣ ].
Trang 30M ng đa chi uả ề
int soDong = 3;
int soCot = 4;
int[,] mang = new int[soDong, soCot];
for(int i = 0; i < soDong; i++)
Trang 31M ng đa chi uả ề
Ø Ngoài ra có th duy t b ng cách sau:ể ệ ằ
for (int i = 0; i < mang.GetLength(0); i++)
Trang 32Đánh giá m ngả
Ø Ưu đi m chính c a m ng:ể ủ ả
o Truy su t nhanh, d s d ng v i t p d li u c ấ ễ ử ụ ớ ậ ữ ệ ố
đ nh không thay đ i trong quá trình th c thiị ổ ự
Ø H n ch c a m ng:ạ ế ủ ả
o M ng có kích c và s chi u c đ nh nên khó ả ỡ ố ề ố ị
khăn trong vi c m r ng ng d ng.ệ ở ộ ứ ụ
o Các ph n t đầ ử ược đ t và tham chi u m t cách ặ ế ộ
liên ti p nhau trong b nh nên khó khăn cho vi c ế ộ ớ ệxóa m t ph n t ra kh i m ng.ộ ầ ử ỏ ả
Trang 33X lý H n ch c a m ngử ạ ế ủ ả
Ø S d ng collections:ử ụ
List, ArrayList, Dictionary… đ thay th cho ể ế
m ng khi thao tác trên t p d li u có thay đ i trong ả ậ ữ ệ ổquá trình th c thi (Thay đ i giá tr , thay đ i s lự ổ ị ổ ố ượng, thay đ i v trí các ph n t …)ổ ị ầ ử
v Các collection này r t d s d ng và có kh năng ấ ễ ử ụ ả
t “co giãn” theo s thay đ i c a d li u trong ự ự ổ ủ ữ ệquá trình th c thi.ự
Trang 36Chuy n đ i ki u ký tể ổ ể ự
t ự
§ char ch1 = Convert.ToChar("a"); // ch1 = ‘a’
§ char ch1 = Convert.ToChar("aa"); // báo l iỗ
Trang 38So sánh ki u ký tể ự
§ True: n u 2 ký t b ng nhauế ự ằ
§ False: n u 2 ký t không b ng nhauế ự ằ
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’ ế ả
Trang 39Ki m tra ký tể ự
Trang 40Ki m tra ký tể ự
vConsole.WriteLine(Char.IsDigit('1')); //True
vConsole.WriteLine(Char.IsDigit('½')); //False
vConsole.WriteLine(Char.IsNumber('½')); //True
vConsole.WriteLine(Char.IsNumber('2')); //True
vConsole.WriteLine(Char.IsLetter('1')); //False
vConsole.WriteLine(Char.IsLower('A')); //False
vConsole.WriteLine(Char.IsUpper('a')); //False
vConsole.WriteLine(Char.IsWhiteSpace(' ')); //True
Trang 45N 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 ế ỗ ằ ế ớ ơ ế ỏ ơ
bool i;
// Tr v True ả ề
i = s.Constains( "lo" );
Trang 46N 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);
Trang 47N 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í {<value i>:<ki u format>} trong ế ị ể FormatStr thành các giá tr ị value1, value2, … tươ ng ng ứ
Trang 48Các hàm x lý Chu iử ỗ
bool Equals( string
value) N i dungvalue, ngộ ượ ạ ả ề : Tr v True n u chu i đang xét b ng v i chu i c l i tr v False.ả ề ế ỗ ằ ớ ỗ
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 !" ả ề
Trang 49N 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;
g 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 ố
Trang 50Các hàm x lý Chu iử ỗ
string 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 ự ở ư ử
Trang 51Các hàm x lý Chu iử ỗ
string 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í ự ắ ầ ừ ị
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" );
Trang 52Các hàm x lý Chu iử ỗ
bool StartsWith( string
value)
N i dung ộ : Ng ượ ạ ớ c l i v i hàm EndsWith
string Substring( int startIdx,
ộ : Tr v chu i con trong chu i ả ề ỗ ỗ ban đ u, b t đ u t v trí ầ ắ ầ ừ ị startIdx và có đ ộ
Trang 53string 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 ự ả ắ ở ầ
Trang 54N i dung: ộ N i các chu i trong m ng ố ỗ ả value thành 1
chu i, phân cách b i ỗ ở separator
Ví 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);
Trang 55END