我正在尝试使用自定义numpunct
将字符串转换为double。如果字符串不是货币格式,我希望转换失败 - 例如1,000,000.0
#include <iostream>
#include <sstream>
using namespace std;
class ThousandCommaSeparator: public std::numpunct<char>
{
public:
ThousandCommaSeparator(){}
protected:
virtual char do_decimal_point() const { return '.'; }
virtual char do_thousands_sep() const { return ','; }
virtual string_type do_grouping() const { return "\3";}
};
int main()
{
istringstream ss("2015/05/03");
ss.imbue(locale(cout.getloc(),new ThousandCommaSeparator));
double output;
if (ss >> output)
{
cout << "Success: " << output << endl;
}
else
{
cout << "Failure: " << output << endl;
}
}
我希望上述内容失败,但它总是成功,并将输出值设置为2015.我猜测我错误地使用numpunct
,希望有人可以指出我正确的方向!
答案 0 :(得分:4)
输入流中的数千个分隔符是可选的。如果它们存在,它们必须正确放置,但它们不必存在。
因此,无论2015
如何,std::numpunct
都是转换为数字的有效输入。