检查字符串是否为数字的最快方法是什么?

时间:2012-12-06 11:34:28

标签: c++

检查像“2.4393”或“2”这样的字符串是否有效的最快方法是什么 - 它们都可以用双倍表示,而字符串“2.343”。或“ab.34”不是?特别是,我希望能够读取任何字符串,如果它可以是一个双精度型,则为它分配一个双变量,如果它不能是一个双精度(在它是的情况下)一个单词或只是无效的输入),会显示一条错误信息。

4 个答案:

答案 0 :(得分:5)

使用std::istringstream并使用eof()确认所有数据已消耗:

std::istringstream in("123.34ab");
double val;
if (in >> val && in.eof())
{
    // Valid, with no trailing data.
}
else
{
    // Invalid.
}

请参阅http://ideone.com/gpPvu8上的演示。

答案 1 :(得分:2)

您可以使用std::stod()。如果无法转换字符串,则抛出异常。

答案 2 :(得分:0)

如stefan所述,您可以使用std::istringstream

coords          getWinSize(const std::string& s1, const std::string& s2)
{
  coords winSize;
  std::istringstream iss1(s1);
  std::istringstream iss2(s2);

  if ((iss1 >> winSize.x).fail())
    throw blabla_exception(__FUNCTION__, __LINE__, "Invalid width value");
  /*
   .....
  */
}

在我的代码中,coords是:

typedef struct coords {
    int     x;
    int     y;
} coords;

答案 3 :(得分:0)

使用boost::lexical_cast,如果转换失败则抛出异常。