gpt4 book ai didi

c++ - 如何使用与错误报告无关的区域设置 strtod

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:04 26 4
gpt4 key购买 nike

我正在使用 strtod() 将字符串转换为十进制。由于我需要为不正确的输入/无效字符抛出错误,所以我别无选择。 然而,问题是 strtod() 受语言环境影响。所以一个'.'当程序在不同的语言环境中运行时变成无效字符

如果我使用这样的解决方案:

std::istringstream text(iterator->second.c_str());
text.imbue(std::locale::classic());
double result;
text >> result;

根本不可能检查无效输入。

哪个解决方案可以为我提供两者?

最佳答案

是的,您可以确定提供给字符串流的值是否已完全转换。您可以测试流以查看它是否到达文件末尾。如果有,那么您已经阅读了所有内容并将其转换为 double 。如果不是,则输入无效。

这是一个演示转换的小示例:

bool convert(const std::string & text)
{
if (text = "")
return false;
std::istringstream iss(text);
iss.imbue(std::locale::classic());
double result;
iss >> result;
if (iss.eof())
return true;
else
return false;
}

int main()
{
std::cout << convert("123.456") << std::endl;
std::cout << convert("123.456abc") << std::endl;
std::cout << convert("123.456e5") << std::endl;
std::cout << convert("e5") << std::endl;
return 0;
}

输出:

1
0
1
0

Live Example

关于c++ - 如何使用与错误报告无关的区域设置 strtod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31861193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com