good example c++ stream

c++ - example - La forma óptima de obtener una cadena o char*en un istream?



ofstream c++ example (2)

Esto funcionará:

std::istringstream is("abc...");

Y como istringstream es un istream, podrás utilizar tu objeto is como istream.

¿Cuál es la forma más óptima de obtener un puntero de cadena o char * en un istream?

Quiero hacer lo siguiente

std::string a = "abc.."; //I know this can be done, not sure if this is most efficient // and not sure about char* pointers std::istringstream istr (a); ... foo (istr); void foo(std::istream& is) { }


Si desea construir un istringstream a partir de él, un char * hasta el carácter nulo, o todas las cosas de una std :: string:

istringstream str(ptr); // char* istringstream str(other_str); // std::string

Si habla de querer un puntero sin formato en el buffer de un istream, no puede hacerlo. Las transmisiones obtienen sus datos bajo demanda si los necesitan, ya sea desde archivos, terminales u otros, opcionalmente almacenando sus cosas en búfer (bueno, no exactamente. Puede usar un strstream , que acepta un puntero sin procesar y lee / escribe directamente desde allí. es una clase obsoleta - no la use. Tengo suerte de que nunca lo haya hecho). Si todo lo que desea es algo que pueda usar como un puntero, puede usar los iteradores streambuf. Sin embargo, en realidad no son indicadores, así que no puedes restar el end del begin y otras cosas:

std::istreambuf_iterator<char> begin(one_istream), end; while(begin != end) std::cout << *begin++;

Si habla de obtener una cadena de lo que estaba escrito en un flujo de cadena, puede usar ostringstream::str :

ostringstream o; o << "This is a number: " << 42; std::string str = o.str(); // str == "This is a number: 42"

De lo contrario, generalmente solo puedes leer cosas de istream . Necesitas un ostream , entonces puedes hacer

stream.write(ptr, N); stream.write(ptr.c_str(), ptr.c_str() + ptr.size());

para escribir exactamente N caracteres de los bytes a los que str apunta. Puede escribirlo en la secuencia usando << demasiado. Escribirá todo hasta el carácter nulo, o todo desde una cadena std ::, pero respetará las marcas de formato, como el ancho del campo:

stream << ptr; // char* stream << other_str; // everything from std::string