我知道這很簡單,我只是不記得最好的方式來做到這一點。 我有一個輸入,如" 5 15 "
,它定義了2D向量數組的x和y。 我只需要這兩個數字到int col
和int row
。從空字符串中獲取int的最佳方法是什麼?
這樣做的最好方法是什麼?我正在嘗試stringstreams,但無法弄清楚正確的代碼。
感謝您的幫助!
我知道這很簡單,我只是不記得最好的方式來做到這一點。 我有一個輸入,如" 5 15 "
,它定義了2D向量數組的x和y。 我只需要這兩個數字到int col
和int row
。從空字符串中獲取int的最佳方法是什麼?
這樣做的最好方法是什麼?我正在嘗試stringstreams,但無法弄清楚正確的代碼。
感謝您的幫助!
您可以使用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
}
我個人比較喜歡的C方式,這是使用sscanf()
:
const char* str = " 5 15 ";
int col, row;
sscanf(str, "%d %d", &col, &row); // (should return 2, as two ints were read)
的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等)用於字符串到整數的轉換 - 當然取決於編譯器。
流不屬於來自STL的std庫的那部分。 – sbi 2010-12-15 02:01:14
這裏的stringstream
方式:
int row, col;
istringstream sstr(" 5 15 ");
if (sstr >> row >> col)
// use your valid input
假設你已經驗證的輸入是真的該格式,然後
sscanf(str, "%d %d", &col, &row);
@Downvoters:如果在這個答案中有技術錯誤,請讓我知道;否則我不知道什麼是錯的。 – 2010-04-12 01:05:13
在這種特殊情況下,downvoters有問題,而不是您的代碼。 – wilhelmtell 2010-04-12 01:12:21
@wilhelmtell:+1,我同意。 – 2010-04-12 01:13:37