Сохранить выходные данные cout в переменную

#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 С удовольствием! Всегда рад помочь