从具有空格的字符串中获取整数的最佳方法?

时间:2010-04-12 00:08:08

标签: c++ string whitespace

我知道这很简单,我不记得最好的办法。 我有像" 5 15 "这样的输入,用于定义2D矢量数组的x和y。 我只需要将这两个数字放入int colint row

最好的方法是什么?我正在尝试使用stringstreams,但无法弄清楚正确的代码。

感谢您的帮助!

5 个答案:

答案 0 :(得分:16)

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的实现(stringstream,Boost lexical_cast等)快120倍,用于字符串到整数的转换 - 当然取决于编译器。 / p>

答案 1 :(得分: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
}

答案 2 :(得分:2)

以下是stringstream方式:

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

答案 3 :(得分:0)

假设您已经验证输入确实是那种格式,那么

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

答案 4 :(得分:-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)