Подтвердить что ты не робот

Преобразование строки стиля C в С++ std::string

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

4b9b3361

Ответ 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.