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.
weeo
источник
3
Невозможно воспроизвести: coliru.stacked-crooked.com/…
chris
10
Что заставляет вас думать, string(1, c)что не работает? Это правильный способ сделать это.
templatetypedef
1
Какой компилятор вы используете? Какая среда. Возможно, это ошибка вашего компилятора.
Морис Ривз
libc ++ abi.dylib: terminate вызвал
выдачу
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 03
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 04
1
Я не могу убрать голос за этот неправильный комментарий ...
Джейк OPJ 01
10

Я искренне думал, что метод литья подойдет. Поскольку это не так, вы можете попробовать stringstream. Пример ниже:

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;
Mallen
источник
2
Я не думаю, что тот факт, что этот конкретный строковый конструктор не работает, имеет какое-либо отношение к реальной проблеме.
Крис
1
Наверное, прав, но подумал, что могу предложить простой ответ: П
Маллен
Это решение работает, однако использование stringstream ( <sstream>) не обязательно, поскольку оно будет включать всю библиотеку в проект, замедляя процесс компиляции. Старайтесь избегать включения в проект ненужных зависимостей.
Кристиан