文字列から 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文字からユーザー定義のコンマ区切り(char sep)を設定したいと思います(^ 10のリテラルであるEまたはeなし)。どうすれば実装できますか?
これを具体的に説明しましょう: 区切り文字は ',' なので、文字列は 123123asfsaf,adsd,as.1231 となり、123123,1231 を double として返す必要があります。最初の「,」(左から) を認識し、他のすべてを無視します。
この問題の解決策を見つけるのは本当に難しいです。setlocale について考えてみましたが、最善の解決策とは思えません。
ありがとうございました!