2010-12-13 9 views
28

¿Hay alguna forma directa de calcular el tamaño de la cadena interna en stringstream?Tamaño de stringstream

Aquí, str() devuelve una copia y luego obtiene el tamaño de la cadena.

std::stringstream oss("String"); 
oss.str().size(); 

Respuesta

15
std::stringstream oss("String"); 
oss.seekp(0, ios::end); 
stringstream::pos_type offset = oss.tellp(); 

Esto es para el puntero de escritura, pero el resultado es el mismo para puntero de lectura en Visual C++ v10.

41

Por supuesto que es:

std::stringstream oss("Foo"); 
oss.seekg(0, ios::end); 
int size = oss.tellg(); 

Ahora, tamaño contendrá el tamaño (en bytes) de la cadena.

EDIT:

Esto también es una buena idea poner después de que el fragmento anterior, ya que pone el puntero interno de vuelta al principio de la cadena.

oss.seekg(0, ios::beg); 
+0

Interesante. Me pregunto si esto siempre mostrará el mismo resultado que los equivalentes del puntero de escritura. –

+1

Si usa el puntero de escritura, ¿debería seguir buscando hasta el final? ¿No sería siempre al final? – Ferruccio

+1

Gcc 4.4 no parece gustarle esto, establece el flujo failbit –

Cuestiones relacionadas