2010-04-12 9 views
13

Wiem, że to jest proste, po prostu nie mogę sobie przypomnieć najlepszego sposobu na zrobienie tego. Mam dane wejściowe, takie jak " 5 15 ", które definiują X i Y w 2D tablicy wektorowej. Po prostu potrzebuję tych dwóch liczb do int col i int row.Najlepszy sposób, aby uzyskać ints z ciągu znaków z odstępami?

Jaki jest najlepszy sposób na zrobienie tego? Byłem nurty stringów, ale nie mogę znaleźć prawidłowego kodu.

Dzięki za pomoc!

Odpowiedz

10

Można to zrobić za pomocą 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

@Dvaloters: Jeśli wystąpi błąd techniczny w tej odpowiedzi, proszę dać mi znać; inaczej nie wiem, co jest nie tak. –

+5

W tym konkretnym przypadku jest coś nie tak z downwotami, a nie z kodem. – wilhelmtell

+2

@wilhelmtell: +1, zgadzam się. –

-1

ja osobiście wolę sposobem C, która jest w użyciu sscanf():

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

C++ String Toolkit Library (StrTk) ma następujące rozwiązanie problemu:

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; 
} 

Więcej przykładów można znaleźć Here

Uwaga: Ta metoda jest około 2-4 razy szybsza niż standardowe procedury biblioteczne i około 120+ razy szybsza niż implementacja STL tacje (stringstream, Boost lexical_cast itp.) dla konwersji ciągów do liczb całkowitych - w zależności od używanego kompilatora.

+0

Strumienie nie należą do tej części std lib pochodzącej ze STL. – sbi

2

Oto stringstream sposób:

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

Zakładając już potwierdzone, że wejście jest naprawdę w tym formacie, a następnie

sscanf(str, "%d %d", &col, &row); 
Powiązane problemy