Lớp string và các hàm xử lý string trong C++

Ở các bài viết trước chúng ta đã cùng nhau đi tìm hiểu về Chuỗi ký tự trong ngôn ngữ lập trình C, và Các hàm xử lý chuỗi trong ngôn ngữ lập trình C.

Tuy nhiên ở các bài viết này là chúng ta xử dụng chuỗi là mảng các ký tự.

Ngoài mảng ký tự, chúng ta có thể sử dụng lớp string để lưu trữ chuỗi ký tự trong C++, lớp string sẽ có rất nhiều ưu điểm hơn so với mảng ký tự.

Vậy trong bài viết này chúng ta cùng tìm hiểu về lớp string và các hàm xử lý chuỗi ký tự trong lớp string.

Lớp string trong C++

Trong C++, bạn có thể tạo ra một đối tượng string để lưu trữ chuỗi ký tự. Không giống mảng ký tự, đối tượng string không có kích thước cố định và có thể mở rộng nếu cần.

Để sử dụng được đối tượng string chúng ta cần thêm thư viện string: #include <string>.

Cú pháp khai báo đối tượng string:

string <tên đối tượng string>;

Khi khái báo có thể gán một hằng string hoặc các string khác vào một biến string.

string str1 = "I love";
string str2 = str1;

So sánh chuỗi, gắn, nối chuỗi trong lớp string

Gắn chuỗi

Để gắn chuỗi này cho một chuỗi khác, hoặc gắn chuỗi bằng 1 chuỗi mới chúng ta sẽ xử dụng dấu “=“.

string str1;
str1 = "Vi du gan chuoi"; //Gan chuoi str1 = Vi du gan chuoi
string str2; 
str2 = str1; //Gắn chuỗi str2 chính bằng với str1

Nối chuỗi

Không giống như mảng ký tự, lớp string cho phép chúng ta có thể nối 2 chuỗi với nhau thông qua toán tử là dấu “+“.

Tuy nhiên bạn cần lưu ý là, chỉ có thể nối 2 chuỗi với nhau bằng dấu công “+” chứ không thể “-” 2 chuỗi cho nhau nhằm loại bỏ chuỗi a khỏi chuỗi b nào đó nha.

Ví dụ như sau:

string a = "Blog tuicocach.com";
string b = " - Tu hoc lap trinh, kien thuc cong nghe, thu thuat huu ich";
string c = a+b;

Như vậy lúc này string c sẽ mang nội dung là “Blog tuicocach.com – Tu hoc lap trinh, kien thuc cong nghe, thu thuat huu ich“.

So sánh chuỗi bằng các toán tử quan hệ

Lớp string cho phép chúng ta có thể sử dụng các toán tử quan hệ (<, >, ==, !=,…) để so sánh 2 chuỗi với nhau.

string a = "abccd";
string b = "abcd";
if(a==b) cout<<"true"; else cout<<"false\n"; //Kq = false
if(a>b) cout<<"true"; else cout<<"false\n"; //Kq = false
if(a<b) cout<<"true"; else cout<<"false\n"; //Kq = true

Khi mới nhìn vào có thể bạn sẽ chưa hiểu tại sao kết quả nó lại ra như vậy, mình sẽ giải thích cho bạn như sau.

Để so sánh 2 chuỗi, lớp string không so sánh độ dài 2 chuỗi….Mà nó sánh theo Alpha B và từ Trái qua phải. Tức là 2 chuỗi sẽ được lấy lần lượt các ký tự từ đầu chuỗi cho đến khi gặp 1 ký tự khác nhau, ký tự nào có vị trí trong Alpha B lớn hơn(b > a, c> a, c>b) chuỗi đó sẽ lớn hơn.

Nếu không gặp ký tự nào khác nhau thì 2 chuỗi đó bằng nhau, nhưng nếu chuỗi a dài hơn chuỗi b lúc này chuỗi a sẽ là lớn hơn(Hiểu đơn giản là vì lúc này chuỗi a dài hơn nên ký tự thứ a[n+1] so sanh với ký tự rỗng, gọi n là độ dài chuỗi b).

Một số ví dụ cụ thể như sau:

abc bằng với abc
abc > abbbbbbbbbbbbb
abc < accccccccc
abc < abcaaaaa
aaaaa < bb

Các hàm xử lý chuỗi trong lớp string

Thư viện <string> rất nhiều hàm cho phép xử lý chuỗi. Ví dụ: tìm chiều dài chuỗi, so sánh hai chuỗi, tìm kiếm/rút trích chuỗi con, nối chuỗi,…

Ở đây chúng ta giả sử khai báo biến string s.

Hàm s.length()

Trả về số lượng ký tự trong string s(độ dài chuỗi).

string s1 = "tuicocach.com";
cout<<"length of s1 = "<<s1.length();//13

Hàm s.substr(x, y)

Rút trích một chuỗi con với chiều dài y bắt đầu tại vị trí x. Nếu không có y, một chuỗi con từ vị trí x tới cuối chuỗi sẽ được rút trích.

string s = "https://tuicocach.com";
cout<<s.substr(8, 9); //Rút trích chuỗi từ vị trí số 8, và độ dài rút trích là 9
//Kết quả: tuicocach

Hàm s.find(r)

Kiểm tra chuỗi string r có xuất hiện trong chuỗi s hay không. Nếu có thì trả về vị trí bắt đầu xuất hiện chuỗi r trong chuỗi s.

string s = "https://tuicocach.com";
cout<<s.find("tui");//8

Hàm s.erase(x, n)

Xóa n ký tự bắt đầu tại vị trí x.

string s = "https://tuicocach.com";
s.erase(3,7);
cout<<s;//htticocach.com

Hàm s.replace(x, n, str)

Thay thế n ký tự tại vị trí bắt đầu là x bằng chuỗi str. Lưu ý: chiều dài của str có thể lớn hơn n.

string s = "https://tuicocach.com";
s.replace(8, 9, "12312312");
cout<<s;	 //https://12312312.com

Hàm s1.compare(s2)

So sánh chuỗi s1 với s2. Giá trị trả về là -1 nếu s1 < s2, bằng 0 nếu s1 == s2, là nếu s1 > s2. (Hàm này thực hiện so sánh tương tự như phần so sánh bằng toán tử quan hệ như bên trên)

string s1 = "http://tuicocach.com";
string s2 = "hello world";
cout<<"s1 compare s2:"<<s1.compare(s2);  //1

Hàm s1.swap(s2)

Hoán đổi nội dung hai chuỗi.

Hàm s1.insert(index, s2)

Thêm chuỗi s2 vào s1 sau vị trí index.

string s1 = "http://tuicocach.com";
string s2 = "hello world";
s1.insert(10, s2);
cout<<s1;
//Kết quả:
//http://tuihello worldcocach.com

Cảm ơn bạn đã theo dõi bài viết! Chúc bạn học tốt!

5

1

Bỏ phiếu bình chọn

Xếp hạng bài viết