Bài 18: Giới thiệu và làm quen với Chuỗi kí tự

Tủ sách mở Wikibooks

Các bài toán lập trình không chỉ dừng lại ở việc xử lí các con số, mà còn xử lí các dữ liệu chuỗi kí tự. Ngôn ngữ C++ không có kiểu dữ liệu chuẩn cho chuỗi kí tự mà chỉ có kiểu char lưu trữ một kí tự riêng. Do vậy, chuỗi kí tự sẽ được xây dựng dựa trên việc ghép các kí tự kiểu char lại với nhau trong một mảng. Tuy nhiên, ta không cần kì công học cách xây dựng chuỗi kí tự kiểu đó, mà sẽ được học thư viện chuỗi kí tự được xây dựng sẵn bởi C++.

Giới thiệu kiểu string

Vốn C++ không có kiểu dữ liệu chuẩn lưu trữ chuỗi kí tự mà chỉ có kiểu char lưu trữ kí tự đơn lẻ, nên việc hình thành các chuỗi kí tự phải thông qua mảng. Với những người mới học lập trình, điều này khá là rắc rối, bởi không chỉ khó trong việc thao tác mà hay còn xuất hiện những điều phiền toái.

Kiểu string là một kiểu được dựng sẵn của C++ để lưu trữ và thuận tiện xử lý các chuỗi kí tự. Về bản chất, kiểu string là mảng char và mỗi phần tử kí tự thuộc kiểu char. Chuỗi kí tự kiểu string có thể linh hoạt thay đổi kích thước và ta có thể làm việc với nó một cách thoải mái và tự nhiên như kiểu chuỗi trong các ngôn ngữ lập trình khác.

Khai báo

Khai báo thư viện

Kiểu string được xây dựng trong thư viện cùng tên. Để sử dụng chúng, trước hết ta phải khai báo thư viện string:

#include <string>

Khai báo biến

Sau khi khai báo thư viện cần thiết, ta đã có thể sử dụng kiểu dữ liệu string lưu trữ các chuỗi kí tự. Việc khai báo biến kiểu string tương tự như khai báo các biến khác, ví dụ:

string a;
string s = "Xin chao";
string c = a + s;

Về bản chất, kiểu string chính là mảng các kí tự kiểu char. Tuy nhiên, ta không cần phải khai báo rõ kích thước của string giống như mảng, bởi vì nó có thể linh hoạt thay đổi và không giới hạn về độ dài.

Truy cập chuỗi

Ta có thể truy cập các kí tự của chuỗi như cách truy cập các phần tử của mảng. Ví dụ:

string s = "Ngo Bao Chau";
cout << s[0] << endl;  // In ra kí tự 'N'
cout << s[1] << endl;  // in ra kí tự 'g'
cout << s[5] << endl;  // In ra kí tự 'a'
cout << s[7] << endl;  // In ra kí tự ' '

Chú ý, biến s có kiểu dữ liệu là string, nhưng cũng chính là mảng s kiểu char, cho nên các phần tử s[0], s[1],... có kiểu dữ liệu là char.





BÀI TẬP