C++:
Nối chuỗi ký tự
Làm thế nào:
Trong C++, chúng ta có một vài cách để nối các chuỗi. Dưới đây là một ví dụ sử dụng std::string
và toán tử cộng (+
):
#include <iostream>
#include <string>
int main() {
std::string hello = "Hello, ";
std::string world = "World!";
std::string greeting = hello + world;
std::cout << greeting << std::endl; // Kết quả: Hello, World!
return 0;
}
Nhanh và đơn giản, phải không? Nhưng, chúng ta cũng có thể sử dụng append()
:
#include <iostream>
#include <string>
int main() {
std::string hello = "Hello, ";
hello.append("World!");
std::cout << hello << std::endl; // Kết quả: Hello, World!
return 0;
}
Hoặc thậm chí là toán tử operator+=
nếu bạn muốn:
#include <iostream>
#include <string>
int main() {
std::string hello = "Hello, ";
hello += "World!";
std::cout << hello << std::endl; // Kết quả: Hello, World!
return 0;
}
Sâu hơn nữa
Lịch sử, C++ đã tiếp bước từ C, sử dụng các mảng ký tự và chức năng như strcat()
để làm việc với chuỗi. Điều này rối rắm và dễ gặp lỗi hơn.
C++ hiện đại đã cải thiện tình hình với std::string
. Nó an toàn hơn, dễ đọc hơn, và mang lại cho bạn nhiều lựa chọn. Nếu std::string
không phải là gu của bạn, có std::stringstream
hoặc thậm chí là std::format
(từ C++20) dành cho những người hâm mộ định dạng.
Về bản chất, việc nối chuỗi bao gồm cấp phát bộ nhớ và sao chép. Nếu thực hiện không cẩn thận, nó có thể ảnh hưởng đến hiệu suất của chương trình như một cú đập. Các con trỏ thông minh và ngữ nghĩa di chuyển giảm bớt một số nỗi đau ở đây.
Đừng quên về các lựa chọn khác - các thư viện như Boost, hoặc xử lý UTF-8 với std::string_view
cho các hoạt động không sao chép trên C++ hiện đại.
Xem thêm
- Tài liệu tham khảo C++ cho
std::string
: https://cplusplus.com/reference/string/string/ - Bản thảo làm việc của C++, Tiêu chuẩn cho Ngôn ngữ Lập trình C++: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2020/n4861.pdf
- Tìm hiểu thêm về
std::format
: https://en.cppreference.com/w/cpp/utility/format - Tài liệu thư viện Boost: https://www.boost.org/doc/libs/1_75_0/libs/string_algo/doc/html/index.html