先頭へ戻る

整数を文字列に変換する | Programming Place Plus C++編 逆引き

トップページC++編逆引き

先頭へ戻る

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 と更新されており、今後も 3年ごとに更新されます。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

目的

「100」「-50」のような整数を文字列に変換したいとします。

方法①(std::to_string関数を使う)[C++11~]

C++11以降であれば、std::to_string関数を使うのが簡単です。この関数は、引数に整数や実数の値を渡すと、std::string に変換して返してくれます。

#include <iostream>
#include <string>

int main()
{
    std::string s;

    s = std::to_string(100);
    std::cout << s << std::endl;

    s = std::to_string(-50);
    std::cout << s << std::endl;

    s = "+" << std::to_string(+50);
    std::cout << s << std::endl;
}

実行結果:

100
-50
+50

整数の定数を「+50」のように表記できるので、変換後の文字列にも符号をきちんと付けたいことがあるかもしれません。std::to_string関数では、そこまでの対応はできないので、自力で付加します。

このように、std::to_string関数はとても簡単に使えますが、シンプル過ぎて、高度な変換はできません。もう少し、高度な変換を必要とする場合は、方法②のように、std::ostringstream を使います。

方法②(std::ostringstream を使う)[C++03~]

C++11 の機能が使えない場合や、高度な変換が必要な場合には、std::ostringstream を使います。

この方法の場合、各種マニピュレータや書式フラグが使えます(【標準ライブラリ】第30章)。たとえば、正の数を変換するときに + の符号を付けたければ、std::showpos を使用します。

#include <iostream>
#include <sstream>
#include <string>

int main()
{
    std::string s;
    std::ostringstream oss;

    oss << 100 << std::flush;
    s = oss.str();
    std::cout << s << std::endl;

    oss.str("");  // 前回までの内容をクリア
    oss << -50 << std::flush;
    s = oss.str();
    std::cout << s << std::endl;

    oss.str("");  // 前回までの内容をクリア
    oss << std::showpos << 50 << std::flush;
    s = oss.str();
    std::cout << s << std::endl;
}

実行結果:

100
-50
+50

方法③(std::sprintf系の関数を使う)[C++03~]

std::ostringstream でも対応し切れない場合、C言語の sprintf系の関数を使うと対応できることがあるかもしれません。この方法についての詳細は、C言語編の逆引きを参照してください。

なお、std::snprintf関数は C++11以降、std::sprintf関数は C++03以降で使用可能です。


参考リンク


更新履歴

’2017/6/7 新規作成。



逆引きのトップページへ

C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー