#c
#c
Вопрос:
Следующий оператор выводит все виды выходных данных на консоль в виде одной строки текста
std::cout << "Hi, my name is " << name_as_string << " and I am " << age_as_int << " years old, while weighing " << weight_as_double << " kilograms.";
Можем ли мы использовать этот же синтаксис для построения строки в строковой переменной? Как это делается?
Ответ №1:
#include <sstream>
std::ostringstream ss;
ss << "Hi, my name is " << name_as_string;
ss << " and I am " << age_as_int << " years old, while weighing ";
ss << weight_as_double << " kilograms.";
std::string str = ss.str();
Вы также можете использовать std::istringstream
для множественного ввода и std::stringstream
как для ввода, так и для вывода.
std::string str = "1 2 3 4 5";
std::istringstream ss(str);
int i;
while( ss >> i) {
std::cout << i;
}
Комментарии:
1. Технически
std::ostringstream
было бы более простым.2. Мне кажется, это позор, что вы не можете просто использовать std::string str = ss; в последней строке. Предположительно, на то есть веская причина, вы знаете, в чем она заключается?
3. @BillForster: Неявные преобразования иногда опасны и часто нежелательны.
4. @GMan: Да, я знаю, но в данном случае вся идея заключается в создании чего-то, что вы можете преобразовать в строку. Почему бы не упростить преобразование настолько, насколько это возможно?
5. @BillForster: 5 дополнительных символов не замедляют работу, не усложняют чтение и не создают ошибок, которые невозможно найти.
Ответ №2:
stringstream выручит вас здесь;
#include <sstream>
std::stringstream ss;
ss << stuff << to << output;
std::string s = ss.str();
Ответ №3:
Используйте std::ostringstream
Ответ №4:
Используя std::stringstream
:
#include <sstream>
#include <iostream>
int main()
{
std::stringstream ss;
ss << "Hi, my name is " << name_as_string << " and I am " << age_as_int << " years old, while weighing " << weight_as_double << " kilograms.";
std::cout<<ss.str()<<std::endl;
}