2011-11-07 10 views
7

La siguiente declaración de tuberías de todo tipo de salida en la consola como una sola cadena de texto¿Puedes crear una cadena de forma similar a std :: cout?

std::cout << "Hi, my name is " << name_as_string << " and I am " << age_as_int << " years old, while weighing " << weight_as_double << " kilograms."; 

Podemos usar esta misma sintaxis para construir una cadena en una variable de cadena? ¿Cómo se hace?

Respuesta

10
#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(); 

También puede utilizar std::istringstream para la entrada múltiple y std::stringstream tanto de entrada como de salida.

std::string str = "1 2 3 4 5"; 
std::istringstream ss(str); 
int i; 
while(ss >> i) { 
    std::cout << i; 
} 
+0

Técnicamente 'std :: ostringstream' habría más addecuate. –

+0

Me parece una pena que no puedas ir a std :: string str = ss; en la ultima linea Presumiblemente hay una buena razón, ¿sabes lo que es? –

+3

@BillForster: las conversiones implícitas son a veces peligrosas y, a menudo, indeseables. – GManNickG

2

stringstream lo rescatará aquí;

#include <sstream> 

std::stringstream ss; 

ss << stuff << to << output; 

std::string s = ss.str(); 
1

Mediante el uso de 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; 
} 
Cuestiones relacionadas