2010-04-12 13 views
13

So che è semplice, non riesco a ricordare il modo migliore per farlo. Ho un input come " 5 15 " che definisce la xey di una matrice vettoriale 2D. Ho semplicemente bisogno di quei due numeri in int col e int row.Il modo migliore per ottenere da una stringa con spazi bianchi?

Qual è il modo migliore per farlo? Stavo tentando di seguire le piste, ma non riesco a capire il codice corretto.

Grazie per qualsiasi aiuto!

risposta

10

È possibile farlo utilizzando un stringstream:

std::string s = " 5 15 "; 
std::stringstream ss(s); 

int row, column; 
ss >> row >> column; 

if (!ss) 
{ 
    // Do error handling because the extraction failed 
} 
+0

@Downvoters: se c'è un errore tecnico in questa risposta, per favore fatemelo sapere; altrimenti non so cosa c'è che non va. –

+5

In questo caso particolare c'è qualcosa di sbagliato con i downvoters, non con il tuo codice. – wilhelmtell

+2

@wilhelmtell: +1, sono d'accordo. –

-1

Io personalmente preferisco il modo in C, che è quello di utilizzare sscanf():

const char* str = " 5 15 "; 
int col, row; 
sscanf(str, "%d %d", &col, &row); // (should return 2, as two ints were read) 
15

Il C++ String Toolkit Library (StrTk) ha la seguente soluzione al vostro problema:

int main() 
{ 
    std::string input("5 15"); 
    int col = 0; 
    int row = 0; 
    if (strtk::parse(input," ",col,row)) 
     std::cout << col << "," << row << std::endl; 
    else 
     std::cout << "parse error." << std::endl; 
    return 0; 
} 

Più esempi si possono trovare Here

Nota: questo metodo è circa 2-4 volte più veloce delle routine di libreria standard e più o meno 120 volte più veloce di quello basato su STL tations (stringstream, Boost lexical_cast etc) per la conversione da stringa a intero, a seconda del compilatore utilizzato, naturalmente.

+0

Gli stream non appartengono a quella parte della lib std che proviene dall'STL. – sbi

2

Ecco il modo stringstream:

int row, col; 
istringstream sstr(" 5 15 "); 
if (sstr >> row >> col) 
    // use your valid input 
0

Supponendo che hai già validati che l'ingresso è davvero in quel formato, quindi

sscanf(str, "%d %d", &col, &row); 
Problemi correlati