Ở 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>.
- Kiếm tiền Accesstrade, kiếm tiền tại nhà với Accesstrade.vn – Tiếp thị liên kết
- MegaURL – Rút gọn link kiếm tiền có giá cao tại Việt Nam
- Top 4 App kiếm tiền online trên điện thoại tốt nhất 2022
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
- Khóa học lập trình C/C++ từ A-Z cho người mới – Giảm giá 40% hôm nay
- Khóa học Java cơ bản dành cho người mới bắt đầu- Giảm 40% hôm nay
- Khóa học lập trình Android từ cơ bản đến thành thạo – Giảm ngay 40%
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à 1 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!
XEM THÊM Cách tìm UCLN và BCNN trong lập trình C/C++ Tìm hiểu về Hàm đệ quy trong lập trình Thuật toán tìm kiếm nhị phân trong C/C++ Thuật toán đếm số lượng chữ số của số nguyên dương n bằng C / C++ Thuật toán tính dãy số Fibonacci bằng 3 cách trong C/C++