Char作为C中的小数分隔符

时间:2012-12-04 10:54:59

标签: c decimal separator

我编写了一个从字符串中提取double的函数。像asfas123123afaf到123123或afafas12312.23131asfa到12312.23131使用点作为小数点分隔符。

以下是代码:

double get_double(const char *str, char sep)
{


    char str_dbl[80]; 
    size_t i,j; 
    char minus; 
    double dbl; 

    for (minus = 1, i = j = 0; i < strlen(str); ++i) 
    { 

        if ( 
            (str[i] == '-' && minus) 
            || (str[i] >= '0' && str[i] <= '9') 
            || (str[i] == 'e' || str[i] == 'E') 
            ) 
        { 
            str_dbl[j++] = str[i]; 
            minus = 0; 
        } 
    } 
    str_dbl[j] = '\0';       

    dbl = strtod (str_dbl,NULL); 

    return dbl; 



} 

但是现在我想从ASCII-chars设置一个用户定义的逗号分隔符(char sep)(没有E或e,它们是^ 10的文字)。我怎么能实现它?

让我分析一下:我们说分隔符是','所以字符串是123123asfsaf,adsd,as.1231它应该返回123123,1231作为double。它识别第一个','(左起)并忽略所有其他。

我很难为这个问题找到解决方案。我已经考虑过setlocale,但我认为它似乎不是最好的解决方案。

谢谢!

3 个答案:

答案 0 :(得分:1)

在执行,之前,您只需将.替换为strtod

如果由于某种原因不想修改源字符串,请先将其复制到新字符串。

答案 1 :(得分:0)

我知道使用String.Split做了这个事情,但我认为你应该编写自己的函数,当它找到第一个时停止。

这是msdn网站,以获得更多帮助

MSDN Split

答案 2 :(得分:0)

您可以简单地扩展您的代码:

if ( 
            (str[i] == '-' && minus) 
            || (str[i] >= '0' && str[i] <= '9') 
            || (str[i] == 'e' || str[i] == 'E') 
            ) 

char separator = ','; //or whatever you want
int have_separator = 0;

if ( 
            (str[i] == '-' && minus) 
            || (str[i] >= '0' && str[i] <= '9') 
            || (str[i] == 'e' || str[i] == 'E') 
            || str[i] == separator
            ) 
{ 
  if (str[i] == separator && have_separator == 0)
  {
    have_separator = 1;
    str_dbl[j++] = str[i];
    continue;
  }
...

请注意,这只是一些尝试显示的想法 - 而不是真正的工作代码(但无论如何它都可以工作)。你可以使用类似的概念。