2010-04-12 84 views
13

我知道這很簡單,我只是不記得最好的方式來做到這一點。 我有一個輸入,如" 5 15 ",它定義了2D向量數組的x和y。 我只需要這兩個數字到int colint row從空字符串中獲取int的最佳方法是什麼?

這樣做的最好方法是什麼?我正在嘗試stringstreams,但無法弄清楚正確的代碼。

感謝您的幫助!

回答

10

您可以使用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:如果在這個答案中有技術錯誤,請讓我知道;否則我不知道什麼是錯的。 – 2010-04-12 01:05:13

+5

在這種特殊情況下,downvoters有問題,而不是您的代碼。 – wilhelmtell 2010-04-12 01:12:21

+2

@wilhelmtell:+1,我同意。 – 2010-04-12 01:13:37

-1

我個人比較喜歡的C方式,這是使用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)有以下問題的解決方案:

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

更多的例子可以發現Here

注意:此方法比標準庫例程快大約2-4倍,比基於STL的實現快120倍以上(stringstream,Boost lexical_cast等)用於字符串到整數的轉換 - 當然取決於編譯器。

+0

流不屬於來自STL的std庫的那部分。 – sbi 2010-12-15 02:01:14

2

這裏的stringstream方式:

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

假設你已經驗證的輸入是真的該格式,然後

sscanf(str, "%d %d", &col, &row); 
相關問題