文字列ストリーム 解答ページ | Programming Place Plus C++編【標準ライブラリ】 第29章

トップページ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++編を作成中です。

問題①

問題① 任意の型の数値を文字列に変換する関数テンプレートを実装してください。


ostringstream を利用します。

#include <iostream>
#include <sstream>

namespace {

    template <typename T>
    std::string to_string(T num)
    {
        std::ostringstream oss;
        oss << num << std::flush;
        return oss.str();
    }

}

int main()
{
    std::string s1(to_string(123));
    std::string s2(to_string(4.5));
    std::string s3(to_string(999U));
    std::string s4(to_string(-999L));

    std::cout << s1 << "\n"
              << s2 << "\n"
              << s3 << "\n"
              << s4 << std::endl;
}

実行結果:

123
4.5
999
-999

ostringstream<>::strメンバ関数が返す文字列は、ストリームが保持している文字列のコピーなので、このサンプルプログラムのように、関数テンプレート(通常の関数でも)から return しても、無効になってしまうことはなく、問題ありません。


参考リンク


更新履歴

’2017/2/7 新規作成。



第29章のメインページへ

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る