C ++ конвертувати з 1 символу в рядок? [зачинено]


121

Мені потрібно віддати лише 1 charдо string. Протилежний спосіб досить простий str[0].

Наступне не працювало для мене:

char c = 34;
string(1,c);
//this doesn't work, the string is always empty.

string s(c);
//also doesn't work.

boost::lexical_cast<string>((int)c);
//also doesn't work.

3
Не вдається відтворити: coliru.stacked-crooked.com/…
chris

10
Що ви думаєте, string(1, c)що не працює? Це правильний спосіб зробити це.
templatetypedef

1
Який компілятор ви використовуєте? Яке середовище. Можливо, це помилка у вашому компіляторі.
Моріс Рівз

libc ++ abi.dylib: припинити виклик кидання виключення
weeo

3
@ weeo- Помилка, ймовірно, десь у вашій програмі. Будь ласка, опублікуйте автономний, відтворюваний приклад, який демонструє помилку, щоб ми могли допомогти вам зрозуміти, що не так.
templatetypedef

Відповіді:


184

Всі

std::string s(1, c); std::cout << s << std::endl;

і

std::cout << std::string(1, c) << std::endl;

і

std::string s; s.push_back(c); std::cout << s << std::endl;

працював на мене.


4
Найкоротший шлях: рядок s = “” + c;
doctorram

17
@doctorram НІ! 1. лапки, які ви використовуєте, недійсні C ++; 2. Навіть якщо ви мали на увазі, що s = "" + cце просто UB, оскільки це не означає "об'єднати порожній рядок із символом c", це означає "вказівник на якусь копію порожнього рядка, розширену числовим значенням c(що, безумовно, не те, що ви 3. якщо ви мали на увазі s = ""s + c, це все-таки довше, ніж s{1, c}... (і вам доведеться using std::literals;кудись писати ...
Масса

11
Вибачте, я мав на увазі: string s = string () + 'a';
doctorram

1
Я не можу зняти пропозицію щодо цього неправильного коментаря ...
Джейк OPJ

10

Я чесно думав, що метод кастингу буде добре працювати. Оскільки це не так, ви можете спробувати stringstream. Приклад нижче:

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

2
Я не думаю, що той факт, що цей конструктор струн не працює, не має нічого спільного з реальною проблемою.
chris

1
Напевно, правильно, але я подумав, що запропоную просту відповідь: П
Маллен

Це рішення працює, однак використання stringstream ( <sstream>) не потрібно, оскільки воно буде включати всю проектну бібліотеку, уповільнюючи процес компіляції. Намагайтеся уникати зайвих залежностей у своєму проекті.
Крістіан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.