C++編で扱っている C++ は 2003年に登場した C++03
という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14
-> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++
の学習を始めるのなら、C++11
よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい
C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。
「100」「-50」のような整数を文字列に変換したいとします。
C++11以降であれば、std::to_string関数を使うのが簡単です。この関数は、引数に整数や実数の値を渡すと、std::string に変換して返してくれます。
#include <iostream>
#include <string>
int main()
{
std::string s;
= std::to_string(100);
s std::cout << s << std::endl;
= std::to_string(-50);
s std::cout << s << std::endl;
= "+" << std::to_string(+50);
s std::cout << s << std::endl;
}
実行結果:
100
-50
+50
整数の定数を「+50」のように表記できるので、変換後の文字列にも符号をきちんと付けたいことがあるかもしれません。std::to_string関数では、そこまでの対応はできないので、自力で付加します。
このように、std::to_string関数はとても簡単に使えますが、シンプル過ぎて、高度な変換はできません。もう少し、高度な変換を必要とする場合は、方法②のように、std::ostringstream を使います。
C++11 の機能が使えない場合や、高度な変換が必要な場合には、std::ostringstream を使います。
この方法の場合、各種マニピュレータや書式フラグが使えます(【標準ライブラリ】第30章)。たとえば、正の数を変換するときに + の符号を付けたければ、std::showpos を使用します。
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::string s;
std::ostringstream oss;
<< 100 << std::flush;
oss = oss.str();
s std::cout << s << std::endl;
.str(""); // 前回までの内容をクリア
oss<< -50 << std::flush;
oss = oss.str();
s std::cout << s << std::endl;
.str(""); // 前回までの内容をクリア
oss<< std::showpos << 50 << std::flush;
oss = oss.str();
s std::cout << s << std::endl;
}
実行結果:
100
-50
+50
std::ostringstream でも対応し切れない場合、C言語の sprintf系の関数を使うと対応できることがあるかもしれません。この方法についての詳細は、C言語編の逆引きを参照してください。
なお、std::snprintf関数は C++11以降、std::sprintf関数は C++03以降で使用可能です。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |