Каков наилучший способ преобразования строки C-стиля в С++ std::string
? Раньше я делал это с помощью stringstream
s. Есть ли лучший способ?
Преобразование строки стиля C в С++ std::string
Ответ 1
Строки С++ имеют конструктор, который позволяет конвертировать строки в стиле C:
char* myStr = "This is a C string!";
std::string myCppString = myStr;
Ответ 2
Проверьте различные конструкторы класса string: документация Вас может заинтересовать:
//string(char* s)
std::string str(cstring);
и
//string(char* s, size_t n)
std::string str(cstring, len_str);
Ответ 3
Если вы имеете в виду от char*
до std::string
, вы можете использовать конструктор.
char* a;
std::string s(a);
Или, если string s
уже существует, просто напишите это:
s=std::string(a);
Ответ 4
Вы можете инициализировать std::string
непосредственно из c-строки:
std::string s = "i am a c string";
std::string t = std::string("i am one too");
Ответ 5
C++11
: перегрузка оператора строкового литерала
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
: используйте оператор из пространства имен std::string_literals
using namespace std::string_literals;
auto s3 = "abc\0\0def"s; // is a std::string
Ответ 6
В общем случае (без объявления нового хранилища) вы можете просто использовать конструктор 1-arg для изменения c-строки в строку rvalue:
string xyz = std::string("this is a test") +
std::string(" for the next 60 seconds ") +
std::string("of the emergency broadcast system.");
Однако это не работает при построении строки для передачи ее по ссылке на функцию (проблема, с которой я просто столкнулся), например
void ProcessString(std::string& username);
ProcessString(std::string("this is a test")); // fails
Вам нужно сделать ссылку ссылкой const:
void ProcessString(const std::string& username);
ProcessString(std::string("this is a test")); // works.