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: 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;

2
Я не думаю, что тот факт, что этот конкретный строковый конструктор не работает, имеет какое-либо отношение к реальной проблеме.
Крис

1
Наверное, прав, но подумал, что могу предложить простой ответ: П
Маллен

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