Cách tốt nhất để chuyển đổi chuỗi kiểu C thành C++ std::string
là gì? Trong quá khứ tôi đã thực hiện nó bằng cách sử dụng stringstream
s. Có cách nào tốt hơn?Chuyển đổi chuỗi C thành kiểu C++ std :: string
Trả lời
C chuỗi ++ có một constructor cho phép bạn chuyển đổi chuỗi C-style:
char* myStr = "This is a C string!";
std::string myCppString = myStr;
và bây giờ tôi cũng phải làm 'xóa myStr; 'không? –
@BarnabasSzabolcs Không, điều đó không cần thiết. Bạn chỉ cần xóa bộ nhớ được cấp mới. Các con trỏ tới các chuỗi ký tự không cần phải được deallocated. – templatetypedef
Tôi hiểu, vì vậy tôi đoán đúng, chuỗi tạo một bản sao nội bộ của char * này. –
Bạn có thể khởi một std::string
trực tiếp từ một c-string:
std::string s = "i am a c string";
std::string t = std::string("i am one too");
Kiểm tra các nhà thầu khác nhau của chuỗi lớp: documentation Bạn có thể quan tâm đến:
//string(char* s)
std::string str(cstring);
Và:
//string(char* s, size_t n)
std::string str(cstring, len_str);
Nếu bạn có ý nghĩa char*
-std::string
, bạn có thể sử dụng các nhà xây dựng.
char* a;
std::string s(a);
Hoặc nếu string s
đã tồn tại, bạn chỉ cần viết này:
s=std::string(a);
No. Ví dụ của bạn sẽ ném một lỗi logic trong std :: constructor của chuỗi. 'a' không thể là NULL. –
Nói chung (không có tuyên bố lưu trữ mới), bạn chỉ có thể sử dụng các nhà xây dựng 1-arg để thay đổi c-chuỗi thành một chuỗi rvalue:
string xyz = std::string("this is a test") +
std::string(" for the next 60 seconds ") +
std::string("of the emergency broadcast system.");
Tuy nhiên, điều này không làm việc khi xây dựng chuỗi để vượt qua nó bằng cách tham chiếu đến một chức năng (một vấn đề tôi chỉ chạy vào), ví dụ:
void ProcessString(std::string& username);
ProcessString(std::string("this is a test")); // fails
Bạn cần phải thực hiện các tài liệu tham khảo một tham chiếu const:
void ProcessString(const std::string& username);
ProcessString(std::string("this is a test")); // works.
C++11
: quá tải một nhà điều hành literal chuỗi
std::string operator ""_s(const char * str, std::size_t len) {
return std::string(str, len);
}
auto s1 = "abc\0\0def"; // C style string
auto s2 = "abc\0\0def"_s; // C++ style std::string
C++14
: Sử dụng các nhà điều hành từ std::string_literals
namespace
using namespace std::string_literals;
auto s3 = "abc\0\0def"s; // is a std::string
- 1. Chuyển đổi một void * thành std :: string
- 2. chuyển đổi Rcpp :: CharacterVector thành std :: string
- 3. C++ std :: string to boolean
- 4. Chuyển đổi đôi thành chuỗi trong C++
- 5. Chuyển đổi std :: string thành số nguyên
- 6. Chuyển đổi QString thành std :: string
- 7. chuyển đổi std :: string thành basic_ostream?
- 8. Chuyển đổi uint64_t thành std :: string
- 9. Chuyển đổi std :: string thành std :: vector <char>
- 10. C++ printf với std :: string?
- 11. Chuyển đổi chuỗi bị xóa thành từ điển <string, string> trong C#
- 12. C++ int chuỗi chuyển đổi
- 13. C++/CLI Chuyển đổi từ hệ thống :: Chuỗi^để std :: string
- 14. Chuyển đổi mảng ngắn thành chuỗi C#
- 15. C-Style strings to std :: làm rõ chuỗi chuyển đổi
- 16. Làm thế nào để chuyển đổi unsigned char * thành std :: string in C++?
- 17. Chuyển đổi gấp đôi thành chuỗi C++?
- 18. String để chuyển đổi enum trong C#
- 19. C# Chuyển đổi Danh sách <string> thành Từ điển <string, string>
- 20. Chuyển đổi chuỗi thành nổi trong C#
- 21. chuyển đổi byte thành chuỗi C#
- 22. .NET/C# - Chuyển đổi char [] thành chuỗi
- 23. Chuyển đổi một CFStringRef thành chuỗi C?
- 24. Chuyển đổi chuỗi thành Ngày - C#
- 25. Chuyển đổi từ chuỗi std :: thành bool
- 26. Chuyển đổi std :: chuỗi thành hàm hiện có với các tham số trong C++
- 27. Làm thế nào để chuyển đổi std :: string thành NSString?
- 28. Chuyển đổi Ada String để C Void *
- 29. Cách SWIG std :: string & to C# ref string
- 30. C++ std :: string append vs push_back()
Chuỗi cstring là gì? Bạn có nghĩa là một 'CString' từ MFC? Hoặc một mảng null kết thúc của char (một chuỗi C)? Hay cái gì khác? –