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 ng 2
X lý m ng và chu i ử lý mảng và chuỗi ảng và chuỗi ỗi
Trang 2N i dung ội dung
Trang 6Khai báo M ng ảng và chuỗi
Ki uD Li u ểu dữ ữ ệu [] tênM ng; ảng
Trang 7Kh i t o M ng ởi tạo Mảng ại Học Quốc Gia TP.HCM ảng và chuỗi
Trang 8Kh i t o và gán giá tr M ng ởi tạo Mảng ại Học Quốc Gia TP.HCM ị Mảng ảng và chuỗi
gtri2, gtri3,…};
Giá tr không nh t thi t ph i là h ng s ịnh ất thiết phải là hằng số ết phải là hằng số ảng ằng số ố phần tử trong mảng được xác định
Ví dục, bắt
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ử trong mảng được xác định ịnh ất thiết phải là hằng số ặc phải bằng số ảng ằng số ố phần tử trong mảng được xác định
ph n t m ng đ ần tử có cùng kiểu dữ ử có cùng kiểu dữ ảng ượp nhiều phần tử có cùng kiểu dữ c khai báo
Trang 9Truy su t t ng ph n t M ng ất từng phần tử Mảng ừng phần tử Mảng ần tử Mảng ử lý mảng và chuỗi ảng và chuỗi
Xác đ nh s ph n t c a m ng ịnh ố phần tử trong mảng được xác định ần tử có cùng kiểu dữ ử có cùng kiểu dữ ủ ảng
L y đi m th 3 (soThuTu = 2) c a m ng ất thiết phải là hằng số ểu dữ ứa các tủ ủ ảng diem
int diem3 = diem[2];
diem3 = 7
Trang 10Gán giá tr cho t ng ph n t M ng ị Mảng ừng phần tử Mảng ần tử Mảng ử lý mảng và chuỗi ảng và chuỗi
th nh t c ng 4 ứa các tủ ất thiết phải là hằng số ột phòng chứa các tủ
Trang 11Duy t M ng ệ Thống Thông Tin ảng và chuỗi
for (int i = 0; i < diem.Length; i++)
{
Console.WriteLine(diem[i].ToString());
}
for (int i = 0; i < diem.Length; i++)
{
diem[i] += 1;
Console.WriteLine(diem[i].ToString());
}
Trang 12Duy t M ng b ng foreach ệ Thống Thông Tin ảng và chuỗi ằng foreach
C n duy t m t ph n trong m ng (ví d duy t ần tử có cùng kiểu dữ ệu ột phòng chứa các tủ ần tử có cùng kiểu dữ ảng ục, bắt ệu
t ph n t th 2 t i th 10) ừ 0 ần tử có cùng kiểu dữ ử có cùng kiểu dữ ứa các tủ ớc ứa các tủ
C n duy t t cu i v đ u m ng ần tử có cùng kiểu dữ ệu ừ 0 ố phần tử trong mảng được xác định ều phần tử có cùng kiểu dữ ần tử có cùng kiểu dữ ảng
C n bi t ch s m ng trong vòng l p ần tử có cùng kiểu dữ ết phải là hằng số ỉ mục, bắt ố phần tử trong mảng được xác định ảng ặc phải bằng số
C n thay đ i giá tr c a ph n t m ng ần tử có cùng kiểu dữ ổi giá trị của phần tử mảng ịnh ủ ần tử có cùng kiểu dữ ử có cùng kiểu dữ ảng
Trang 13Sao chép M ng ảng và chuỗi
mangA và diem cùng tham chi u đ n vùng nh ết phải là hằng số ết phải là hằng số ớc
ch a các ph n t c a m ng ứa các tủ ần tử có cùng kiểu dữ ử có cùng kiểu dữ ủ ảng
Thay đ i giá tr trong mangA sẽ nh h ổi giá trị của phần tử mảng ịnh ảng ưởng đến ng đ n ết phải là hằng số
diem
Trang 16Đ o M ng ảng và chuỗi ảng và chuỗi
Ph ương thức ng th c ứa các tủ Reverse c a l p ủ ớc Array th c hi n vi c ự tủ, chỉ mục tủ ệu ệu
đ o th t các ph n t trong m ng Cú pháp th c ảng ứa các tủ ự tủ, chỉ mục tủ ần tử có cùng kiểu dữ ử có cùng kiểu dữ ảng ự tủ, chỉ mục tủ
Trang 17S p x p M ng ắp xếp Mảng ế Luật ảng và chuỗi
Ph ương thức ng th c ứa các tủ Sort() c a l p ủ ớc Array th c hi n vi c ự tủ, chỉ mục tủ ệu ệu
s p x p các ph n t trong m ng Cú pháp th c hi n: ắt ết phải là hằng số ần tử có cùng kiểu dữ ử có cùng kiểu dữ ảng ự tủ, chỉ mục tủ ệu
Trang 18Tìm ki m trên M ng ế Luật ảng và chuỗi
Trang 19Tìm ki m trên M ng ế Luật ảng và chuỗi
m ng đã đ ảng ượp nhiều phần tử có cùng kiểu dữ c s p x p tr ắt ết phải là hằng số ước c, tr v k t qu ảng ều phần tử có cùng kiểu dữ ết phải là hằng số ảng
là s nguyên cho bi t ch s index c a ph n ố phần tử trong mảng được xác định ết phải là hằng số ỉ mục, bắt ố phần tử trong mảng được xác định ủ ần tử có cùng kiểu dữ
t tìm đ ử có cùng kiểu dữ ượp nhiều phần tử có cùng kiểu dữ c , n u không tìm đ ết phải là hằng số ượp nhiều phần tử có cùng kiểu dữ c thì tr v - ảng ều phần tử có cùng kiểu dữ
Trang 20Tìm ki m trên M ng đã s p x p ế Luật ảng và chuỗi ắp xếp Mảng ế Luật
K t qu ết phải là hằng số ảng vitri=4 (Tìm th y s 7 v trí th 4) ất thiết phải là hằng số ố phần tử trong mảng được xác định ởng đến ịnh ứa các tủ
K t qu ết phải là hằng số ảng vitri=-1 (-1 t c là không tìm th y s ứa các tủ ất thiết phải là hằng số ố phần tử trong mảng được xác định
113)
mang
Trang 21Tìm ki m trên M ng ch a s p x p ế Luật ảng và chuỗi ư ắp xếp Mảng ế Luật
nhiên n u tr ết phải là hằng số ường hợp không được thay đổi ng h p không đ ợp nhiều phần tử có cùng kiểu dữ ượp nhiều phần tử có cùng kiểu dữ c thay đ i ổi giá trị của phần tử mảng
này)
gi i thu t tìm ki m tuy n tính ảng ập hợp nhiều phần tử có cùng kiểu dữ ết phải là hằng số ết phải là hằng số
Trang 22Tìm ki m trên M ng ch a s p x p ế Luật ảng và chuỗi ư ắp xếp Mảng ế Luật
Gi i thu t tìm ki m tuy n tính ảng ập hợp nhiều phần tử có cùng kiểu dữ ết phải là hằng số ết phải là hằng số
Xét ph n t t đ u cho đ n cu i m t cách tu n t ần tử có cùng kiểu dữ ử có cùng kiểu dữ ừ 0 ần tử có cùng kiểu dữ ết phải là hằng số ố phần tử trong mảng được xác định ột phòng chứa các tủ ần tử có cùng kiểu dữ ự tủ, chỉ mục tủ
T i v trí th ạo mảng mới và gán giá trị từ mảng cũ ịnh ứa các tủ i n u giá tr trong d li u đúng v i ết phải là hằng số ịnh ữ ệu ớc
khoá c n tìm ki m -> tìm th y N u không đúng ần tử có cùng kiểu dữ ết phải là hằng số ất thiết phải là hằng số ết phải là hằng số
tìm đ n ph n t k ti p ết phải là hằng số ần tử có cùng kiểu dữ ử có cùng kiểu dữ ết phải là hằng số ết phải là hằng số i+1
N u sau khi xét h t N ph n t mà không có giá tr ết phải là hằng số ết phải là hằng số ần tử có cùng kiểu dữ ử có cùng kiểu dữ ịnh
khoá c n tìm ần tử có cùng kiểu dữ không tìm th y ất thiết phải là hằng số
Trang 23Tìm ki m trên M ng ch a s p x p ế Luật ảng và chuỗi ư ắp xếp Mảng ế Luật
Gi i thu t tìm ki m tuy n tính ảng ập hợp nhiều phần tử có cùng kiểu dữ ết phải là hằng số ết phải là hằng số
• B ước c 1: i = 0; // b t đ u t ph n t đ u tiên c a ắt ần tử có cùng kiểu dữ ừ 0 ần tử có cùng kiểu dữ ử có cùng kiểu dữ ần tử có cùng kiểu dữ ủ
dãy
• B ước c 2: So sánh a[i] v i x, có 2 kh năng : ớc ảng
• + a[i] = x : Tìm th y D ng ất thiết phải là hằng số ừ 0
• B ước c 3 : i = i+1; // xét ti p ph n t k trong ết phải là hằng số ần tử có cùng kiểu dữ ử có cùng kiểu dữ ết phải là hằng số
m ng ảng
• N u i = N: H t m ng,không tìm th y.D ng ết phải là hằng số ết phải là hằng số ảng ất thiết phải là hằng số ừ 0
• Ng ượp nhiều phần tử có cùng kiểu dữ ạo mảng mới và gán giá trị từ mảng cũ c l i: L p l i B ặc phải bằng số ạo mảng mới và gán giá trị từ mảng cũ ước c 2
Trang 24Tìm ki m trên M ng ch a s p x p ế Luật ảng và chuỗi ư ắp xếp Mảng ế Luật
Gi i thu t tìm ki m tuy n tính ảng ập hợp nhiều phần tử có cùng kiểu dữ ết phải là hằng số ết phải là hằng số
};
return -1;// tìm h t m ng nh ng không có x ết mảng nhưng không có x ảng nhưng không có x ưng không có x
}
Trang 25Tìm ki m trên M ng ch a s p x p ế Luật ảng và chuỗi ư ắp xếp Mảng ế Luật
• Ví d : Cho dãy s a ục, bắt ố phần tử trong mảng được xác định
Trang 26Tìm ki m trên M ng ch a s p x p ế Luật ảng và chuỗi ư ắp xếp Mảng ế Luật
Trang 27M ng đa chi u ảng và chuỗi ều
0 1 6
C# h tr m ng đa chi u, đây ta xét m ng 2 ỗi ợp nhiều phần tử có cùng kiểu dữ ảng ều phần tử có cùng kiểu dữ ởng đến ảng
chi u vì nó ph bi n nh t ều phần tử có cùng kiểu dữ ổi giá trị của phần tử mảng ết phải là hằng số ất thiết phải là hằng số
M ng hai chi u th c ch t là m ng c a nh ng ảng ều phần tử có cùng kiểu dữ ự tủ, chỉ mục tủ ất thiết phải là hằng số ảng ủ ữ
m ng m t chi u Ta có th xem m ng hai chi u là ảng ột phòng chứa các tủ ều phần tử có cùng kiểu dữ ểu dữ ảng ều phần tử có cùng kiểu dữ
m t ma tr n g m các hàng và các c t ột phòng chứa các tủ ập hợp nhiều phần tử có cùng kiểu dữ ồm các hàng và các cột ột phòng chứa các tủ
Trang 28M ng đa chi u ảng và chuỗi ều
Trang 29M ng đa chi u ảng và chuỗi ều
Ki u_d _li u ểu dữ ữ ệu [ , ] mang =
new Ki u_d _li u ểu dữ ữ ệu [so_hang, so_cot];
Ví d : ục, bắt
T o m ng 2 chi u có 3 dòng 5 c t: ạo mảng mới và gán giá trị từ mảng cũ ảng ều phần tử có cùng kiểu dữ ột phòng chứa các tủ
int [ , ] mang = new int [3, 5];
Đ truy c p ph n t trong m ng hai chi u, ta s ểu dữ ập hợp nhiều phần tử có cùng kiểu dữ ần tử có cùng kiểu dữ ử có cùng kiểu dữ ảng ều phần tử có cùng kiểu dữ ử có cùng kiểu dữ
d ng index d ng ục, bắt ạo mảng mới và gán giá trị từ mảng cũ tenMang [ v trí dòng ị trí dòng , v trí c t ị trí dòng ột ]
Trang 30M ng đa chi u ảng và chuỗi ều
for( int i = 0; i < soDong; i++)
Trang 31M ng đa chi u ảng và chuỗi ều
Ngoài ra có th duy t b ng cách sau: ể duyệt bằng cách sau: ệ Thống Thông Tin ằng foreach
Trang 32Đánh giá m ng ảng và chuỗi
o Truy su t nhanh, d s d ng v i t p d li u c ất thiết phải là hằng số ễ sử dụng với tập dữ liệu cố ử có cùng kiểu dữ ục, bắt ớc ập hợp nhiều phần tử có cùng kiểu dữ ữ ệu ố phần tử trong mảng được xác định
đ nh không thay đ i trong quá trình th c thi ịnh ổi giá trị của phần tử mảng ự tủ, chỉ mục tủ
o M ng có kích c và s chi u c đ nh nên khó ảng ỡ và số chiều cố định nên khó ố phần tử trong mảng được xác định ều phần tử có cùng kiểu dữ ố phần tử trong mảng được xác định ịnh
khăn trong vi c m r ng ng d ng ệu ởng đến ột phòng chứa các tủ ứa các tủ ục, bắt
o Các ph n t đ ần tử có cùng kiểu dữ ử có cùng kiểu dữ ượp nhiều phần tử có cùng kiểu dữ c đ t và tham chi u m t cách ặc phải bằng số ết phải là hằng số ột phòng chứa các tủ
liên ti p nhau trong b nh nên khó khăn cho ết phải là hằng số ột phòng chứa các tủ ớc
vi c xóa m t ph n t ra kh i m ng ệu ột phòng chứa các tủ ần tử có cùng kiểu dữ ử có cùng kiểu dữ ỏi mảng ảng
Trang 33X lý H n ch c a m ng ử lý mảng và chuỗi ại Học Quốc Gia TP.HCM ế Luật ủa mảng: ảng và chuỗi
List , ArrayList , Dictionary … đ thay th cho ểu dữ ết phải là hằng số
m ng khi thao tác trên t p d li u có thay đ i ảng ập hợp nhiều phần tử có cùng kiểu dữ ữ ệu ổi giá trị của phần tử mảng trong quá trình th c thi (Thay đ i giá tr , thay đ i ự tủ, chỉ mục tủ ổi giá trị của phần tử mảng ịnh ổi giá trị của phần tử mảng
s l ố phần tử trong mảng được xác định ượp nhiều phần tử có cùng kiểu dữ ng, thay đ i v trí các ph n t …) ổi giá trị của phần tử mảng ịnh ần tử có cùng kiểu dữ ử có cùng kiểu dữ
Các collection này r t d s d ng và có kh ất thiết phải là hằng số ễ sử dụng với tập dữ liệu cố ử có cùng kiểu dữ ục, bắt ảng
năng t “co giãn” theo s thay đ i c a d li u ự tủ, chỉ mục tủ ự tủ, chỉ mục tủ ổi giá trị của phần tử mảng ủ ữ ệu trong quá trình th c thi ự tủ, chỉ mục tủ
Trang 34X lý H n ch c a m ng ử lý mảng và chuỗi ại Học Quốc Gia TP.HCM ế Luật ủa mảng: ảng và chuỗi
Trang 35Ki u ký t ể duyệt bằng cách sau: ự
Khai báo ký tự tủ, chỉ mục tủ
• char ch1 = 'a';
Chuy n t s nguyên ểu dữ ừ 0 ố phần tử trong mảng được xác định
• char ch2 = (char) 65; // Ký t ‘A’ ự
• S d ng d u nháy đ n đ khai báo ki u ử có cùng kiểu dữ ục, bắt ất thiết phải là hằng số ơng thức ểu dữ ểu dữ char
Trang 36Chuy n đ i ki u ký t ể duyệt bằng cách sau: ổi kiểu ký tự ể duyệt bằng cách sau: ự
ký t ự tủ, chỉ mục tủ
char ch1 = Convert ToChar( "a" ); // ch1 = ‘a’
char ch1 = Convert ToChar( "aa" ); // báo l i ỗi
Trang 38So sánh ki u ký t ể duyệt bằng cách sau: ự
True: n u 2 ký t b ng nhau ết phải là hằng số ự tủ, chỉ mục tủ ằng số
False: n u 2 ký t không b ng nhau ết phải là hằng số ự tủ, chỉ mục tủ ằng số
char ch1 = 'A';
char ch2 = (char)65;
char ch3 = 'B';
Console.WriteLine(ch1.Equals(ch2)); //K t qu ‘True’ ết phải là hằng số ảng
Console.WriteLine(ch1.Equals(ch3)); //K t qu ‘False’ ết phải là hằng số ảng
Trang 39Ki m tra ký t ể duyệt bằng cách sau: ự
Unicode
th ường hợp không được thay đổi ng
Trang 40Ki m tra ký t ể duyệt bằng cách sau: ự
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
Trang 42Chu i ỗi
Trang 43Chuy n đ i sang Chu i ể duyệt bằng cách sau: ổi kiểu ký tự ỗi
Trang 44Thao tác v i Chu i ới ký tự ỗi
ToCharArray() ho c ặc phải bằng số []: Tr v m ng các ảng ều phần tử có cùng kiểu dữ ảng
Trang 45Các hàm x lý Chu i ử lý mảng và chuỗi ỗi
int
CompareTo( stri
ng value)
N i dung ột phòng chứa các tủ : So sánh chu i đang xét v i chu i ỗi ớc ỗi value Tr v 0 ảng ều phần tử có cùng kiểu dữ
n u hai chu i b ng nhau, 1 n u l n h n và -1 n u nh h n ết phải là hằng số ỗi ằng số ết phải là hằng số ớc ơng thức ết phải là hằng số ỏi mảng ơng thức
Trang 46Các hàm x lý Chu i ử lý mảng và chuỗi ỗi
void CopyTo( int
sourceIndex, char []
destination, int
destinationIndex,
int count)
N i dung ột phòng chứa các tủ : Copy count ký t b t đ u t v trí ự tủ, chỉ mục tủ ắt ần tử có cùng kiểu dữ ừ 0 ịnh sourceIndex
trong chu i vào m ng ký t ỗi ảng ự tủ, chỉ mục tủ destination b t đ u t i v trí ắt ần tử có cùng kiểu dữ ạo mảng mới và gán giá trị từ mảng cũ ịnh
// Tr v m ng ký t ch là "abell" ảng ều phần tử có cùng kiểu dữ ảng ự tủ, chỉ mục tủ
Trang 47Các hàm x lý Chu i ử lý mảng và chuỗi ỗi
N i dung ột phòng chứa các tủ : Tr v chu i đ ảng ều phần tử có cùng kiểu dữ ỗi ượp nhiều phần tử có cùng kiểu dữ c xây d ng t chu i ự tủ, chỉ mục tủ ừ 0 ỗi FormatStr b ng cách thay ằng số
th các v trí {<value i>:<ki u format>} trong ết phải là hằng số ịnh ểu dữ FormatStr thành các giá tr ịnh value1, value2, … t ương thức ng ng ứa các tủ
Ví dục, bắt : string s = "Hello";
int n;
n = 14;
// "Giá tr n = 14.00, căn b c 2 là 3.74" ịnh ập hợp nhiều phần tử có cùng kiểu dữ
s = string.Format( "Giá tr n = {0:N}, căn b c 2 là {1:N}" ịnh ập hợp nhiều phần tử có cùng kiểu dữ , n, Math.Sqrt(n));
Console.WriteLine(s);
// "Giá thành s n ph m = $200.00" ảng ẩm = $200.00"
Console.WriteLine(s);
DateTime date = new DateTime(2011, 2, 2, 1, 1, 1, 511);
Console.WriteLine(s);
DateTime.Now);
Console.WriteLine(s);
Trang 48Các hàm x lý Chu i ử lý mảng và chuỗi ỗi
bool Equals( string
value) N i dung ột phòng chứa các tủ : Tr v True n u chu i đang xét b ng v i chu i ảng ều phần tử có cùng kiểu dữ ết phải là hằng số ỗi ằng số ớc ỗi
value, ng ượp nhiều phần tử có cùng kiểu dữ ạo mảng mới và gán giá trị từ mảng cũ c l i tr v False ảng ều phần tử có cùng kiểu dữ
N i dung ột phòng chứa các tủ : Tr v chu i m i đ ảng ều phần tử có cùng kiểu dữ ỗi ớc ượp nhiều phần tử có cùng kiểu dữ c xây d ng t chu i ban ự tủ, chỉ mục tủ ừ 0 ỗi
đ u b ng cách chèn vào chu i ban đ u t i v trí ần tử có cùng kiểu dữ ằng số ỗi ần tử có cùng kiểu dữ ạo mảng mới và gán giá trị từ mảng cũ ịnh startIndex
chu i con ỗi value.
Ví dục, bắt : string s = "Hello !" ; string val = "everybody" ; //Tr v "Helloeverybody !" ảng ều phần tử có cùng kiểu dữ
s = s.Insert(5, val);
Console WriteLine(s);
int IndexOf(
char/string value) N i dung ột phòng chứa các tủ : Tr v v trí xu t hi n đ u tiên c a ký t ho c ảng ều phần tử có cùng kiểu dữ ịnh ất thiết phải là hằng số ệu ần tử có cùng kiểu dữ ủ ự tủ, chỉ mục tủ ặc phải bằng số
chu i ỗi value trong chu i Tr v -1 n u không tìm th y. ỗi ảng ều phần tử có cùng kiểu dữ ết phải là hằng số ất thiết phải là hằng số