检查像“2.4393”或“2”这样的字符串是否有效的最快方法是什么——它们都可以用双精度表示——而字符串“2.343”。还是“ab.34”不是?特别是,我希望能够读取任何字符串,如果它可以是双精度,则为其分配一个双精度变量,如果它不能是双精度(如果它是一个单词或只是无效输入) ,将显示一条错误消息。
问问题
490 次
4 回答
5
使用std::istringstream
并确认使用所有数据eof()
:
std::istringstream in("123.34ab");
double val;
if (in >> val && in.eof())
{
// Valid, with no trailing data.
}
else
{
// Invalid.
}
于 2012-12-06T11:46:23.990 回答
2
您可以使用std::stod()。如果字符串无法转换,则抛出异常。
于 2012-12-06T11:55:04.353 回答
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");
/*
.....
*/
}
在我的代码中,坐标是:
typedef struct coords {
int x;
int y;
} coords;
于 2012-12-06T11:43:48.890 回答
0
使用boost::lexical_cast
,如果转换失败则抛出异常。
于 2012-12-06T11:48:27.140 回答