Chương 2
Xử lý mảng và chuỗi
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
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
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ủ
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
4
0
6
1
1
2
8
9
0
1
2
3
4
5
6
7
Khai báo mảng
KiểuDữLiệu[]
Ví dụ
tênMảng;
int[] bangDiem;
string[] loiNoi;
DateTime[] ngaySinh;
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
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
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
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
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());
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
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
Sao chép mảng
diem
5
6
7
6
9
mangA
diem
5
6
8
mangA
6
9
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();
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ự
•
Chuyển từ số nguyên
•
char ch1 = 'a';
char ch2 = (char) 65; // Ký tự ‘A’
Chú ý:
•
Sử dụng dấu nháy đơn để khai báo kiểu char
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
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)
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’
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
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
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
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";
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);
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