String
Khái niệm
Trong C++, lớp std::string
hay đối tượng string là thể hiện tiêu biểu cho văn bản, cho phép thao tác với chuỗi một cách an toàn. Nói cách khác, string giảm thiểu tối đa các vấn đề phát sinh về bộ nhớ khi bạn thao tác với chuỗi trong C để tập trung vào toán chính.
Khác biệt giữa chuỗi trong C++ so với C
std::string
trong C++ vẫn giữ tư tưởng thao tác xử lý chuỗi giống trong C. Tuy nhiên, nó hỗ trợ thêm một số tính năng khác.
C++ vẫn hỗ trợ việc thao tác với chuỗi trên mảng tĩnh như trong C, và để dễ thao tác hơn C++ hỗ trợ thêm lớp std::string
. Nói cách khác, trong C++, chúng ta có thể thao tác với chuỗi trên bằng mảng tĩnh hoặc đối tượng thuộc lớp std::string
.
Các thao tác xử lý chuỗi với std::string
Khai báo
Cú pháp:
// Them thu vien
#include <string>
// Khai bao
std::string <tên chuỗi>;
Ví dụ:
std::string str1; str1 = "Xu ly chuoi"; string str2 = "bang std::string"; string str3;
Lấy chiều dài chuỗi
length()
lấy chiều dài của chuỗi.
Ví dụ:
std::string str = "Xu ly chuoi";
cout << str.length() << endl;
Kết quả: 11
.
Lấy 1 ký tự tại vị trí bất kỳ trong chuỗi
at(index)
lấy ký tại vị trí index
.
Ví dụ:
std::string str = "Xu ly chuoi";
cout << str.at(4) << endl;
Kết quả: y
.
Nối 2 chuỗi
+
để nối 2 chuỗi.
Ví dụ:
std::string protocol = "https://";
std::string domain = "stdio.vn";
std::string link = protocol + "www." + domain;
Kết quả: https://www.stdio.vn
.
So sánh chuỗi
Sử dụng các toán tử so sánh > == < để thực hiện so sánh 2 chuỗi theo vị trí trong từ điển.
Cú pháp:
<tên chuỗi thứ 1> <toán tử so sánh> <tên chuỗi thứ 2>
Ví dụ:
if (str1 > str2) { cout << "str1 dung sau str2 trong tu dien!" << endl; } if (str1 == str2) { cout << "Hai chuoi giong nhau!" << endl; } if (str1 < str2) { cout << "str1 dung truoc str2 trong tu dien!" << endl; }
Tìm kiếm chuỗi con
find(pattern)
tìm kiếm chuỗi pattern trong chuỗi target.
Trả về vị trí đầu tiên khi tìm thấy được pattern
trong chuỗi target
.
Ví dụ:
string target = "Welcome to STDIO Training"; string pattern = "to STDIO"; size_t pos = target.find(pattern);
cout << pos;
Kết quả: 8
.
So sánh C string (string.h) và std::string (string)
So sánh sự khác biệt trong một số thao tác xử lý chuỗi trong ngôn ngữ C (thư viện string.h
) và xử lý chuỗi trong ngôn ngữ C++ (thư viện std::string
).
- Truy cập vị trí bất kỳ
- Lấy độ dài chuỗi
- Nối 2 chuỗi
- Sao chép chuỗi
- So sánh 2 chuỗi
std::string
#include <string> using namespace std; int main() { string str1 = "Welcome to "; string str2 = "STDIO Training"; string str_temp; // Truy cap vi tri bat ky char c = str1.at(3); // Lay do dai chuoi site_t length = str1.length(); // Noi 2 chuoi str_temp = str1 + str2; // Sao chep chuoi str_temp = str1; // So sanh 2 chuoi bool result1 = str1 < str2; bool result2 = str1 > str2; bool result3 = str1 == str2; return 0; }
C string
#include <string.h> int main() { char str1[20] = "Welcome to "; char str2[20] = "STDIO Training"; char str_temp[20]; // Truy cap vi tri bat ky char c = str1[3]; // Lay do dai chuoi site_t length = strlen(str1); // Noi 2 chuoi strcat(str_temp, str1); strcat(str_temp, str2); // Sao chep chuoi strcpy(str_temp, str1); // So sanh 2 chuoi int result = strcmp(str1, str2); return 0; }
std::string
không chỉ mở rộng chức năng mà còn:
- Hỗ trợ trừu tượng hóa bằng phương pháp lập trình hướng đối tượng. Một trường hợp trong ví dụ trên, thay vì phải nhớ hàm
strcat
để nối 2 chuỗi như trong C, chỉ cần sử dụng toán tử+
là có thể nối được 2 chuỗi lại một cách dễ dàng. - Hỗ trợ loại bỏ việc quá tập trung vào xử lý bộ nhớ thay vì nghiệp vụ chính.