19

Ada では、数字を区切るためにアンダースコアを使用して数字を書くことができるため、読みやすさが大幅に向上します。例: 1_000_000 (1000000 に相当) C++ にも同様の方法はありますか?

編集: これはソース コードに関する質問であり、I/O に関する質問ではありません。

4

5 に答える 5

10

現在、これを行う方法はありません。ただし、桁区切り記号を導入する提案があります (N3499)。ただし、セパレータとして使用する文字をまだ選択していません。現在の提案は次のとおりです。

  • スペース:4 815 162 342
  • グレイブアクセント:4`815`162`342
  • 一重引用符:4'815'162'342
  • 下線:4_815_162_342

残念ながら、提案に記載されているように、それらはすべて問題を抱えています。

ユーザー定義のリテラルを使用して、ハッキーなアプローチを取ることができます。

long long operator "" _s(const char* cstr, size_t) 
{
    std::string str(cstr);
    str.erase(std::remove(str.begin(), str.end(), ','), str.end());
    return std::stoll(str);
}

int main()
{
    std::cout << "4,815,162,342"_s << std::endl;
}

これは出力されます:

4815162342

指定されたリテラルからすべてのコンマを削除し、整数に変換するだけです。

于 2013-04-04T15:38:32.583 に答える
4
int main()
{
   int x = 1e6;
}
于 2013-04-04T21:33:19.443 に答える
0

探しているものはimbue()、適切なロケール ファセット (この場合はnum_put ) で I/O ストリームを ing することで完全に可能です。

(これは、I/O について話していることを前提としています。ソース自体について話している場合は、C++11 の時点では不可能です。)

于 2013-04-04T15:46:08.743 に答える