2010-11-24 9 views
7

Ich versuche, alte unsichere C-Funktionen loszuwerden, einschließlich sscanf(). Jetzt verwende ichIgnoriere Werte von stringstream (wie% * f in 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; 

Ich brauche nur die ganzen Zahlen von diesem. Gibt es eine Möglichkeit, diese fiesen Dummy-Variablen zu vermeiden?

Vielen Dank im Voraus und einen schönen Tag!

Antwort

4

sstr.ignore(128,' ');

bis zum nächsten Raum Ignorieren oder bis 128 Zeichen gelesen wurden.

+2

Ugh, willkürliche Konstante. –

+0

Ich stimme zu - gibt es keinen Weg, dies ohne eine beliebige Konstante zu tun? –

+4

Wenn Sie sicher sind, dass Sie nach einem Trennzeichen suchen, können Sie s.ignore verwenden (std :: numeric_limits :: max(), ':'); –

3

Sie können mit einem einzigen Dummy erhalten, indem (pro Typ):

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

Das funktioniert, scheint aber so tollpatschig - gibt es sowas nicht wie ss >> a >> ignoriere >> b; ? –