string
string là gì
std::string là một lớp trong thư viện chuẩn <string> (lưu ý không phải <string.h> của C) và về bản chất là bí danh của std::basic_string<char>.
Vì sao nên dùng string
Trong C, thao tác chuỗi phải dùng mảng ký tự. string là một lớp đơn giản, dễ dùng, được dùng rộng rãi trong OI. So với các container STL khác, hằng số của string rất tốt, gần như tương đương mảng ký tự.
string có thể cấp phát động
Giống nhiều container STL khác, string có thể cấp phát động, giúp ta dùng std::cin để nhập trực tiếp nhưng tốc độ cũng chậm hơn. Điều này cũng giúp ta không cần lo về bộ nhớ.
string nạp chồng toán tử cộng và so sánh
Toán tử cộng của string có thể nối hai chuỗi hoặc một chuỗi với một ký tự. Tương tự std::vector, string nạp chồng các toán tử so sánh theo thứ tự từ điển, nên có thể dùng std::sort để sắp xếp chuỗi.
Cách dùng
Giới thiệu các thao tác cơ bản, xem thêm tài liệu C++.
Khai báo
1 | |
Chuyển sang mảng char
Trong C có nhiều hàm xử lý chuỗi nhưng tham số là con trỏ char. Để tiện dùng, string có hai hàm thành viên chuyển thành con trỏ char — data()/c_str() (gần như giống nhau, nhưng nên dùng c_str() vì đảm bảo có ký tự kết thúc, còn data() thì không), ví dụ:
1 2 3 | |
Lấy độ dài
Nhiều hàm trả về độ dài của string:
1 2 3 | |
Độ phức tạp các hàm
strlen() có độ phức tạp tuyến tính theo độ dài chuỗi.
size() và length() không được chỉ rõ trong C++98; từ C++11 là hằng số. Nhưng trên các compiler phổ biến, kể cả C++98, chúng cũng là hằng số.
Warning
Ba hàm này (và find bên dưới) trả về size_t (unsigned long). Vì vậy không thể so sánh/trừ trực tiếp với số âm; nên ép kiểu khi cần.
Tìm vị trí xuất hiện đầu tiên của ký tự (chuỗi)
find(str,pos) dùng để tìm vị trí xuất hiện đầu tiên của ký tự/chuỗi trong chuỗi, bắt đầu từ pos (mặc định 0). Nếu không có thì trả về string::npos (được định nghĩa là -1 nhưng kiểu vẫn là size_t/unsigned long).
Ví dụ:
1 2 3 4 5 6 7 | |
Kết quả:
1 2 3 4 5 | |
Cắt chuỗi con
substr(pos, len) trả về chuỗi gồm tối đa len ký tự bắt đầu từ pos (nếu phần hậu tố từ pos ngắn hơn len thì lấy hết hậu tố).
Ví dụ:
1 2 3 4 5 | |
Kết quả:
1 2 | |
Chèn/xóa ký tự (chuỗi)
insert(index,count,ch) và insert(index,str) là các hàm chèn thường dùng. Lần lượt là chèn count lần ký tự ch tại index và chèn chuỗi str tại index.
erase(index,count) xóa count ký tự bắt đầu từ index (nếu không truyền count thì xóa từ index đến hết).
Ví dụ:
1 2 3 4 5 6 7 8 9 | |
Kết quả:
1 2 3 | |
Thay thế ký tự (chuỗi)
replace(pos,count,str) và replace(first,last,str) là các hàm thay thế thường dùng. Lần lượt là thay thế count ký tự bắt đầu từ pos bằng str, hoặc thay thế đoạn từ first (gồm) đến last (không gồm) bằng str, trong đó first và last là iterator.
Ví dụ:
1 2 3 4 5 | |
Kết quả:
1 2 | |
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:johnvp22, Ir1d
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply