私はこれが繰り返される質問であることを知っており、それに対する多くの回答を見てきましたが、これまで本当に私を助けることができたものはありません.
さまざまな文字列を 2 つのメソッドに渡すことができるようにする必要があります。1 つは double を返し、もう 1 つは int を返します。主な問題は、数値を含まず数値のみを含む文字列を渡すと、メソッドが変換を行わないように、両方のメソッドで厳密なエラー チェックが必要なことです。私が言ったように、私はいくつかの解決策を見てきましたが、私が見た唯一の良い解決策 (従うことができた) は、使用したくない Boost を使用することでした。私が従うことができなかった答えについては、ここからコピーされたその一部です
最善の解決策
幸いなことに、誰かがすでに上記の問題をすべて解決しています。C 標準ライブラリにはstrtol
、これらの問題のないファミリが含まれています。
enum STR2INT_ERROR { SUCCESS, OVERFLOW, UNDERFLOW, INCONVERTIBLE };
STR2INT_ERROR str2int (int &i, char const *s, int base = 0)
{
char *end;
long l;
errno = 0;
l = strtol(s, &end, base);
if ((errno == ERANGE && l == LONG_MAX) || l > INT_MAX) {
return OVERFLOW;
}
if ((errno == ERANGE && l == LONG_MIN) || l < INT_MIN) {
return UNDERFLOW;
}
if (*s == '\0' || *end != '\0') {
return INCONVERTIBLE;
}
i = l;
return SUCCESS;
}
誰かがそれをもう少し説明できれば、それが私が探している答えだと思います。自分のコードにアイデアを適用できるように、それが何をしているのかを十分に理解することはできません。