1

任意の長さの文字列を int に変換しようとしていますが、これまでのところ、長さが制限された文字列に対してのみ機能します。これまでのコード:

long long convertToInt (std::string x){
   long long number;
   std::istringstream ss(x);
   ss >> number;
   return number;}

x=100000000000000000000000001関数はを返します0。誰かが理由を説明できますか?ありがとう。

4

2 に答える 2

5

"100000000000000000000000001"が大きすぎてlong long(またはunsigned long long) に収まらないため、抽出に失敗します。

numeric_limits実装の型の最大値を決定するために使用します。

#include <limits>

std::cout << std::numeric_limits<unsigned long long>::max() << "\n";
std::cout << std::numeric_limits<long long>::max() << "\n";
std::cout << "100000000000000000000000001\n";

プリント:

18446744073709551615
9223372036854775807
10000000000000000000000001

抽出試行の結果をチェックして、抽出が行われたことを確認します。

if (ss >> number)
{
    return number;
}
// Report failure.
于 2013-05-08T07:14:44.443 に答える