Что заставляет вас думать, 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;
@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;
Я не думаю, что тот факт, что этот конкретный строковый конструктор не работает, имеет какое-либо отношение к реальной проблеме.
Крис
1
Наверное, прав, но подумал, что могу предложить простой ответ: П
Маллен
Это решение работает, однако использование stringstream ( <sstream>) не обязательно, поскольку оно будет включать всю библиотеку в проект, замедляя процесс компиляции. Старайтесь избегать включения в проект ненужных зависимостей.
string(1, c)
что не работает? Это правильный способ сделать это.Ответы:
Все
и
и
работал у меня.
источник
s = "" + c
что это просто UB, потому что это не означает «объединить пустую строку с символомc
», это означает «указатель на некоторую копию пустой строки, увеличенный числовым значениемc
(что определенно не то, что вы хотел); 3. если вы имели в видуs = ""s + c
, это все еще дольше, чемs{1, c}
... (и вам нужно будетusing std::literals;
где-то написать ...Я искренне думал, что метод литья подойдет. Поскольку это не так, вы можете попробовать stringstream. Пример ниже:
источник
<sstream>
) не обязательно, поскольку оно будет включать всю библиотеку в проект, замедляя процесс компиляции. Старайтесь избегать включения в проект ненужных зависимостей.