#c #string #cout
#c #строка #cout
Вопрос:
Как я могу сохранить вывод из cout в переменную строкового или символьного типа?
Я написал следующий код, но он не работает:
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
string n;
n = (cout<<"nHello world");
cout<<n;
return 0;
}
Комментарии:
1. Вы должны использовать a
std::ostringstream
вместоstd::cout
.
Ответ №1:
#include <sstream>
std::ostringstream a;
a << "Hello, world!";
std::string b = a.str(); // Or better, `std::move(a).str()`.
std::cout << b;
Комментарии:
1. Спасибо, что он работает, но добавьте в него библиотеку #include<iostream>.
Ответ №2:
Другие ответы показали вам, как захватить форматированный вывод, используя std::(o)stringstream
объект напрямую. Но, если по какой-то причине вам действительно нужно захватить вывод std::cout
, вы можете временно перенаправить std::cout
его на использование std::ostringstream
буфера a, например:
#include <iostream>
#include <sstream>
using namespace std;
int main(){
ostringstream oss;
auto cout_buff = cout.rdbuf(oss.rdbuf());
cout << "nHello world";
cout.rdbuf(cout_buff);
string n = oss.str();
cout << n;
return 0;
}
Ответ №3:
Конечно, есть способ! Но вы должны использовать другой вид потока:
std::ostringstream ss;
ss << "nHello world";
std::string result = ss.str();
Кроме того, в C 20 вы можете просто использовать std::format
:
std::string n = std::format("Hello {}! I have {} catsn", "world", 3);
// n == "Hello world! I have 3 catsn"
Комментарии:
1. В этом случае вы должны использовать
std::ostringstream
(только вывод) вместоstd::stringstream
(ввод вывод), поскольку вам не нужно считывать ввод из потока.2. Спасибо за ваши знания. Его рабочий
3. @AlexG С удовольствием! Всегда рад помочь