Mảng chuỗi 2 chiều trong C++ | Laptrinhcanban.com

Mảng chuỗi 2 chiều trong C++

Cùng tìm hiểu về mảng chuỗi 2 chiều trong C++. Bạn sẽ biết mảng chuỗi 2 chiều là gì, cách khởi tạo và khai báo mảng chuỗi 2 chiều, cũng như cách truy cập phần tử trong mảng chuỗi 2 chiều sau bài học này.

Mảng chuỗi 2 chiều trong C++ là gì

Mảng chuỗi 2 chiều trong C++, hay còn gọi là mảng ký tự 2 chiều trong C++ hoặc là mảng char 2 chiều trong C++, là loại mảng 2 chiều với các phần tử của mảng đều có chung kiểu char, và được sử dụng để lưu giữ nhiều chuỗi ký tự cùng lúc trong cùng một mảng.

Mảng chuỗi 2 chiều trong C++

  • Kiểu char ở đây là kiểu dữ liệu có kích thước nhỏ nhất trong C++, được biểu diễn bởi các ký tự với kích thước là 1 byte. Xem thêm tại Kiểu dữ liệu trong C++.

Trong bài Chuỗi trong C++ là gì chúng ta đã biết chuỗi ký tự trong C++ thực chất là 1 mảng 1 chiều chứa các ký tự thuộc kiểu char. Điều đó có nghĩa, 1 mảng 1 chiều chỉ có thể chứa tối đa 1 chuỗi ký tự duy nhất trong nó mà thôi.

Trong trường hợp cần lưu giữ nhiều chuỗi ký tự trong 1 mảng, thay vì sử dụng mảng 1 chiều thì chúng ta sẽ sử dụng tới mảng chuỗi 2 chiều trong C++ để lưu giữ cùng lúc nhiều chuỗi ký tự trong cùng một mảng.

Ví dụ, 1 chuỗi ký tự trong C++ được lưu giữ vào biến dưới dạng mảng chuỗi 1 chiều như sau:

char s[] = "ABC";

Lưu ý là chuỗi ký tự luôn được kết thúc bởi ký tự \0, nên trong chuỗi trên có 3 ký tự, cộng thêm cả ký tự kết thúc chuỗi \0 nữa nên độ dài (số ký tự) trong chuỗi sẽ là 4, chứ không phải là 3 nhé.

Trong trường hợp chúng ta cần lưu giữ nhiều chuỗi ký tự như trên trong cùng 1 biến, thay vì sử dụng mảng chuỗi 1 chiều thì chúng ta sẽ sử dụng mảng 2 chiều. Do mỗi mảng 1 chiều sẽ biểu diễn 1 chuỗi ký tự, nên khi đặt các mảng 1 chiều này vào trong một mảng chuỗi 2 chiều, chúng ta sẽ chỉ cần 1 mảng chuỗi 2 chiều duy nhất để biểu diễn toàn bộ các chuỗi mà thôi.

Ví dụ cụ thể:

#include <iostream>
using namespace std;
int main()
{
char s[][4] = {"ABC", "DE", "FGH"};

cout << s[0] << endl;
cout << s[1] << endl;
cout << s[2] << endl;

return 0;
}

Kết quả:

ABC
DE
FGH

Và mảng chuỗi 2 chiều trên được biểu diễn dưới dạng bảng như sau:
Mảng chuỗi 2 chiều trong C++

Khai báo mảng chuỗi 2 chiều trong C++

Cách khai báo và khởi tạo mảng chuỗi 2 chiều trong C++ cũng tương tự như với mảng 2 chiều căn bản mà Kiyoshi đã trình bày trong bài Mảng 2 chiều trong C++. Chúng ta viết tên kiểu, tên biến, sau đó là kích thước biến, và các giá trị sau đó trong cặp dấu ngoặc nhọn, với cú pháp sau đây:

Cú pháp khai báo mảng chuỗi 2 chiều trong C++ như sau:

char name[y][x];

Trong đó char là kiểu char, name là tên mảng chuỗi 2 chiều, y là số lượng chuỗi ký tự trong mảng, và x là độ dài (số ký tự) của các chuỗi ký tự đó.

Ví dụ cụ thể về cách khai báo mảng chuỗi 2 chiều trong C++:

// Mảng chuỗi 2 chiều gồm 5 chuỗi ký tự, mỗi chuỗi ký tự gồm 3 ký tự
char int_arr[5][3];

// Mảng chuỗi 2 chiều gồm 2 chuỗi ký tự, mỗi chuỗi ký tự gồm 4 ký tự
char char_arr[2][4];

Khởi tạo mảng chuỗi 2 chiều trong C++

Ngoài cách khai báo thì chúng ta cũng có thể khởi tạo mảng chuỗi 2 chiều và gán các giá trị ban đầu vào mảng.

Có 2 cách để khởi tạo mảng chuỗi 2 chiều trong C++, một là cách thông dụng nhất với cú pháp sau đây:

char name[y][x]= {"string1", "string2", "string3", ...};

Trong đó, các string đặt giữa cặp dấu nháy kép "" chính là các chuỗi ký tự trong mảng chuỗi 2 chiều.

Ví dụ cụ thể:

char s1[5][4] = {"ABC", "DE", "FGH", "abc", "xyz"};

char s2[2][5] = {"ABCD", "DEGH", "FGH"};

Lưu ý, khi khai báo mảng chuỗi chúng ta không thể lược bỏ giá trị y, nhưng khi khởi tạo mảng chuỗi, do chương trình sẽ tự động xác định số chuỗi ký tự có trong mảng, nên đối số y cũng có thể được lược bỏ. Tuy nhiên đối số x thì phải bắt buộc chỉ định, và chúng ta có thể khởi tạo mảng chuỗi 2 chiều như sau:

char s1[][4] = {"ABC", "DE", "FGH", "abc", "xyz"};

char s2[][5] = {"ABCD", "DEGH", "FGH"};

Ngoài cách trên, chúng ta cũng còn một cách nữa để khởi tạo mảng chuỗi 2 chiều trong C++. Ở trong bài Chuỗi trong C++ là gì chúng ta đã biết có 2 cách để biểu diễn một chuỗi trong C++, ví dụ chuỗi “ABC” ngoài cách viết các ký tự vào giữa cặp dấu nháy kép, thì còn có thể được biểu diễn như sau:

char s[] = { 'A', 'B', 'C', '\0' };

Sử dụng cách viết này, chúng ta có thể khởi tạo mảng chuỗi 2 chiều bằng cách đặt ký tự kết thúc chuỗi vào cuối từng chuỗi như sau:

#include <iostream>
using namespace std;
int main()
{
char s[][3] = {'A', 'B', '\0', 'C', 'D', '\0', 'E'};

cout << s[0] << endl;
cout << s[1] << endl;
cout << s[2] << endl;

return 0;
}

Kết quả:

AB
CD
E

Truy cập phần tử trong mảng chuỗi 2 chiều

Khác với mảng 2 chiều chứa các số cần tới một cặp index để xác định vị trí các phần tử, thì trong mảng chuỗi 2 chiều, chúng ta chỉ cần một index duy nhất để xác định vị trí của một chuỗi ký tự trong mảng chuỗi 2 chiều.

Ví dụ cụ thể, chúng ta in mảng chuỗi 2 chiều trong C++ như sau:

#include <iostream>
using namespace std;
int main(){

char fruits[][10] = {"Apple", "Kiwi", "Lemon", "Melon", "Orange"};
// Truy cập vào một chuỗi ký tự cụ thể
cout << "fruits[0]= "<< fruits[0] <<endl;
cout << "fruits[2]= "<< fruits[2] <<endl;

//Lấy độ dài của mảng chuỗi 2 chiều
int y = sizeof(fruits) / sizeof(fruits[0]);

cout << ("\nIn toan bo chuoi\n");
// In ra toàn bộ các chuỗi ký tự trong mảng chuỗi 2 chiều
for(short i=0; i<y; i++){
cout << fruits[i] << endl;
}

return 0;
}

Kết quả:

fruits[0]= Apple
fruits[2]= Lemon

In toan bo chuoi
Apple
Kiwi
Lemon
Melon
Orange

Lại nữa, ngoài truy cập tới các chuỗi ký tự thì chúng ta cũng có thể truy cập tới từng ký tự có trong các chuỗi ký tự đó. Khi đó chúng ta mới cần thêm index thứ 2 biểu thị vị trí của ký tự cần tìm trong chuỗi ký tự mà thôi.

Ví dụ, chúng ta in ra màn hình ký tự thứ 2 (index bằng 3) của tất cả các chuỗi ký tự có trong mảng chuỗi 2 chiều như sau.

#include <iostream>
using namespace std;
int main(){

char fruits[][10] = {"Apple", "Kiwi", "Lemon", "Melon", "Orange"};

//Lấy độ dài của mảng chuỗi 2 chiều
int y = sizeof(fruits) / sizeof(fruits[0]);

// In ra các ký tự của chuỗi ký tự thứ 3 trong mảng
for(short i=0; i<y; i++){
cout << fruits[i][3] <<endl;
}

return 0;
}

Kết quả:

l
i
o
o
n

Lưu ý trong các ví dụ trên chúng ta đã sử dụng toán tử sizeof để lấy độ dài của mảng chuỗi 2 chiều. Bạn có thể tìm hiểu thêm tại bài Lấy kích thước, độ dài và số phần tử trong mảng 2 chiều

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về mảng chuỗi 2 chiều trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.