2010-11-24 10 views
7

J'essaie de me débarrasser des anciennes fonctions C dangereuses, y compris sscanf(). En ce moment j'utiliseIgnorer les valeurs de stringstream (comme% * f dans 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; 

J'ai juste besoin des entiers de cela. Y at-il un moyen d'éviter ces mauvaises variables factices?

Merci d'avance et bonne journée!

Répondre

4

sstr.ignore(128,' ');

Ignore jusqu'à l'espace suivant, ou jusqu'à 128 caractères ont été lus.

+2

Ugh, constante arbitraire. –

+0

Je suis d'accord - n'y a-t-il pas moyen de le faire sans une constante arbitraire? –

+4

Si vous êtes sûr que vous cherchez un délimiteur, vous pouvez utiliser ss.ignore (std :: numeric_limits :: max(), ':'); –

3

Vous pouvez obtenir avec un seul mannequin (par type):

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

Cela fonctionne, mais semble si maladroit - il n'y a pas quelque chose comme ss >> a >> ignore >> b; ? –