在将wstring
转换为double
之前 - 如何使用正则表达式对其进行验证? Java没问题,但是C ++提出问题.. :)
答案 0 :(得分:1)
我想你有一个string
,你想知道它是否是double
。以下代码不使用正则表达式。相反,它初始化stringstream
并从中读取一个双精度数。如果字符串以非数字形式开头,则将设置ss.fail()
。如果它以数字开头,但不读取整个字符串,那么字符串末尾会出现非数字的内容。因此,如果一切顺利且字符串实际上只是一个数字,那么ss.eof() && !ss.fail()
将为true
。
#include <iostream>
#include <sstream>
int main()
{
std::stringstream ss("123.456");
double mydouble;
ss >> mydouble;
if (ss.eof() && !ss.fail())
std::cout << "yay, success: " << mydouble << std::endl;
else
std::cout << "that was not a double." << std::endl;
return 0;
}
如果您需要转换宽字符串,还有std::wstringstream
。
您可能还想查看一下boost库,尤其是在Boost.Lexical_Cast。 使用此库,您可以执行以下操作:
#include <boost/lexical_cast.hpp>
#include <iostream>
int main()
{
try
{
double mydouble = boost::lexical_cast<double>("123.456");
std::cout << "yay, success: " << mydouble << std::endl;
}
catch(const boost::bad_lexical_cast &)
{
std::cout << "that was not a double." << std::endl;
}
return 0;
}
答案 1 :(得分:0)
或者这样做可能更简单:
std::wstring strKeyValue = "147.sd44";
double value = (double) _wtof(strKeyValue.c_str());
如果strKeyValue==0
那么这意味着它不会加倍。