Caractère séparateur décimal en C

J’ai écrit une fonction qui extrait le double d’une chaîne. Comme asfas123123afaf à 123123 ou afafas12312.23131asfa à 12312.23131 en utilisant le point comme séparateur décimal.

Voici le code:

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

Mais maintenant, je veux définir un séparateur de virgule défini par l’utilisateur (char sep) à partir des caractères ASCII (sans E ou e qui sont des littéraux pour ^ 10). Comment pourrais-je l’implémenter?

Permettez-moi de préciser ceci: nous disons que le séparateur est ‘,’ la chaîne est donc 123123asfsaf, adsd, car.1231 devrait renvoyer 123123,1231 sous forme de double. Il reconnaît le premier ‘,’ (de gauche) et ignore tous les autres.

Il m’est vraiment difficile de trouver une solution à ce problème. J’ai pensé à setlocale mais cela ne semble pas être la meilleure solution.

Je vous remercie!

Vous pouvez simplement remplacer n’importe lequel par . avant de faire le strtod .

Si, pour une raison quelconque, vous ne souhaitez pas modifier la chaîne source, copiez-la d’abord dans une nouvelle chaîne.

Eh bien, je sais que l’utilisation de Ssortingng.Split permet de Ssortingng.Split ce problème, mais je pense que vous devriez écrire votre propre fonction, car elle s’arrête lorsqu’elle trouve la première.

voici le site Web msdn pour plus d’aide sur ce

MSDN Split

Vous pouvez simplement étendre votre code:

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

Veuillez noter que ce ne sont que quelques-uns qui essaient de montrer l’idée - pas le vrai code qui fonctionne (mais cela pourrait fonctionner de toute façon). Vous pouvez utiliser un concept similaire.