Преобразование строки в стиле C в строку std::

каков наилучший способ преобразования строки C-стиля в C++ std::string? В прошлом я делал это с помощью stringstreams. Есть ли лучший способ?

6 ответов


строки c++ имеют конструктор, который позволяет конвертировать строки C-стиля:

char* myStr = "This is a C string!";
std::string myCppString = myStr;

Проверьте различные конструкторы класса string:документация Вас может заинтересовать:

//string(char* s)
std::string str(cstring);

и:

//string(char* s, size_t n)
std::string str(cstring, len_str);

если вы имеете в виду char* to std::string, вы можете использовать конструктор.

char* a;
std::string s(a);

и если string s уже существуют, просто напишите это:

s=std::string(a);

Вы можете инициализировать std::string непосредственно из c-строки:

std::string s = "i am a c string";
std::string t = std::string("i am one too");

C++11: перегрузите оператор строкового литерала

std::string operator ""_s(const char * str, std::size_t len) {
    return std::string(str, len);
}

auto s1 = "abcdef";     // C style string
auto s2 = "abcdef"_s;   // C++ style std::string

C++14: Используйте оператор from std::string_literals пространство имен

using namespace std::string_literals;

auto s3 = "abcdef"s;    // is a std::string

В общем случае (без объявления нового хранилища) вы можете просто использовать конструктор 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

вам нужно сделать ссылку ссылку:

void ProcessString(const std::string& username);
ProcessString(std::string("this is a test"));   // works.