2010-11-24 16 views
7

Estoy tratando de deshacerme de las viejas funciones inseguras de C, incluido sscanf(). En este momento estoy usandoIgnorar valores de stringstream (como% * f en sscanf)

#include <sstream> 
std::string str = "111 222.2 333 444.4 555"; 
std::stringstream sstr(str); 
int i, j, k; 
float dummy1, dummy2; 
sstr >> i >> dummy1 >> j >> dummy2 >> k; 

Sólo necesito los enteros de eso. ¿Hay alguna forma de evitar esas desagradables variables ficticias?

Gracias de antemano y que tengas un buen día!

Respuesta

4

sstr.ignore(128,' ');

Ignorar hasta el próximo espacio, o hasta que se leyeron los 128 caracteres.

+2

Uf, constante arbitraria. –

+0

Estoy de acuerdo, ¿no hay una forma de hacer esto sin una constante arbitraria? –

+4

Si está seguro de que está buscando un delimitador, puede usar ss.ignore (std :: numeric_limits :: max(), ':'); –

3

Puede llegar a funcionar con una única variable ficticia (según el tipo):

std::string str("111 222.2 333 444.4 555"); 
std::stringstream sstr(str); 
int i, j, k; 
float dummy; 
sstr >> i >> dummy >> j >> dummy >> k; 
+1

Esto funciona, pero parece tan torpe: ¿no hay algo como ss >> a >> ignorar >> b; ? –