2017-11-14 8 views
1

読み込みchar *が数値(小数点の有無を問わず)として表現できるかどうかを調べる方法を探しています。一方、すべての、文字列(char *)を列挙できるかどうか確認してください

-1.9e-3 
e9 
1e9 
1ee9 
-1-.9e3 
.9e3 
.9.e3 

そのライン1、ライン3を認識することができるだろう、と6行が有効な数字に「列挙」することができます。基本的に私は、私は次を含むテキストファイルを持っている場合は、求めています他の行には誤った入力が含まれています。私はこれがブルートフォースで行われる可能性があることを知っていますが、潜在的に間違っている可能性が無数にあります。 char *全体を読み取る関数があって、「はい、文字列を実際の数値として表すことができます」または「いいえ、文字列を数値に変換できませんそれはなるつもりだ」

列挙されたことは、文字列(char *)が表現したい番号になることを意味します。

+0

[男 'strtold()'](https://linux.die.net/man/3/strtold) –

答えて

1

ちょうどstrtold()を使用すると、成功したかどうかを教えてくれますし、変換された番号も教えてくれます。

+0

@FelixPalmen確かに、なぜありません。ありがとう。 – unwind

0

strtold()で変換して、エラーをチェックしてください。

char *x = "-1.9e-3"; 
errno = 0; 
char *endptr; 
long double xnum = strtold(x, &endptr); 
if (*endptr) // (&& *endptr != '\n' if you read with `fgets()`) 
{ 
    // extra/invalid characters; 
} 
else if (errno == ERANGE) 
{ 
    // out of range; 
} 
+0

if(* endptr)文...そこにはほかに何が入りますか?私は//余分な/無効な文字を完全に理解していません。コメント – sdepot

+0

@sdepotリンク先のマンページを参照してください。 'strtold()'の後に、 '* endptr'は変換できなかった最初の文字を指します。変換が成功すると、これは '0'(文字列の終わり)になると期待しています(' fgets() 'でファイルから読み込んだ場合は改行' \ n')。 –

+0

だから、私はfgetsを使って、各行を完全に読むのですが、strtok()を使って各行の "number"(通常は複数の "number")が読み込まれています。何か? – sdepot

関連する問題