gpt4 book ai didi

c++ - 使用正则表达式 C++ 计算数字中的小数位

转载 作者:行者123 更新时间:2023-11-28 01:32:18 24 4
gpt4 key购买 nike

我想检查一个十进制数是否符合预定义的标准。我使用了以下正则表达式 ^[+-]?[0-9]+(.[0-9]{2,4})$ ,但它似乎在 C++ 中不起作用。我已经尝试了许多正则表达式验证解决方案,并且它可以按预期工作。例如,如果我有数字 0.00000,输出应该为假,另一方面,如果数字为 0.00,输出应该为真。在我的例子中,输出似乎没有检测到任何东西。这是我的源代码,你能帮忙吗?谢谢。

void detectFormatConsistency()
{
std::regex dbl("^[+-]?[0-9]+(\\.[0-9]{2,4})$");
std::smatch matches;
int detected = 0;
for(unsigned int index = 0; index < mixedDistro.size(); index++)
{
double currentValue = mixedDistro[index];
std::string test = std::to_string(currentValue);
if(std::regex_search(test, dbl)) \\I also tried with match
{
detected++;
}
}
printf("Number of points detected: %d\n", detected);
}

更新:以下源代码现在可以按预期工作:

void detectFormatConsistency()
{
std::regex dbl("^[+-]?[0-9]+(\\.[0-9]{2,4})$");
std::smatch matches;
int detected = 0;
for(unsigned int index = 0; index < mixedDistro.size(); index++)
{
double currentValue = mixedDistro[index];
std::string test = tostring(currentValue);
if(std::regex_match(test, dbl))
{
detected++;
}
}
printf("Number of points detected: %d\n", detected);
}



//https://stackoverflow.com/questions/13686482/c11-stdto-stringdouble-no-trailing-zeros
//Thanks to: @Silencer
template<typename T>
std::string tostring(const T &n) {
std::ostringstream oss;
oss << n;
std::string s = oss.str();
unsigned int dotpos = s.find_first_of('.');
if(dotpos!=std::string::npos){
unsigned int ipos = s.size()-1;
while(s[ipos]=='0' && ipos>dotpos){
--ipos;
}
s.erase ( ipos + 1, std::string::npos );
}
return s;
}

谢谢大家的帮助!

最佳答案

std::to_string结果与 printf("%f") 相同的字符串将输出到控制台,后者使用 6 位的默认精度。

所以您的测试设置不合适,您应该改用字符串数组。

旁注:请注意,在 C++ 中,所有双文字 0.00.000.000 , ... 导致相同的 double 值(即尾随零不相关)。实际上,您总是有 64 位来放置您的值,分布在符号位、指数和尾数上 - 对于所有具有相同指数的值,您始终具有完全相同的精度。看看IEEE 754了解详情。

关于c++ - 使用正则表达式 C++ 计算数字中的小数位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50971388/

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