gpt4 book ai didi

c++ - 让 atof 在字符串中的第一个无效 ch 之后继续将字符串转换为数字

转载 作者:行者123 更新时间:2023-11-30 02:11:12 25 4
gpt4 key购买 nike

我想知道是否有办法让 atof 继续转换为数字,即使途中存在无效字符也是如此

例如假设我有字符串“444-3-3-33”我想把它转换成双 a=4443333(并保持字符串原样)很高兴得到任何建议或替代方式

谢谢!

最佳答案

我不能相信这个解决方案,尽管它是一个很好的解决方案,请参阅 this所以发帖。对于那些懒得跳过的人,作者建议使用语言环境将所有非数字数字视为空格。这对您的解决方案来说可能有点矫枉过正,但这个想法很容易适应。您可以只使用“-”作为空格,而不是所有非数字。这是他的代码,不是我的。如果你喜欢这个,请给点赞。

struct digits_only: std::ctype<char> 
{
digits_only(): std::ctype<char>(get_table()) {}

static std::ctype_base::mask const* get_table()
{
static std::vector<std::ctype_base::mask>
rc(std::ctype<char>::table_size,std::ctype_base::space);

std::fill(&rc['0'], &rc['9'], std::ctype_base::digit);
return &rc[0];
}
};

bool in_range(int lower, int upper, std::string const &input) {
std::istringstream buffer(input);
buffer.imbue(std::locale(std::locale(), new digits_only()));

int n;

while (buffer>>n)
if (n < lower || upper < n)
return false;
return true;
}

然后只需删除空格并将字符串传递给 atof

关于c++ - 让 atof 在字符串中的第一个无效 ch 之后继续将字符串转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3760264/

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