在C中作为小数分隔符的字符

我写了一个从字符串中提取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 = '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,但我似乎不是最好的解决方案。

谢谢!

你可以用任何替换. 在做strtod之前。

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

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

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

MSDN拆分

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

 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; } ... 

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