数字から文字列
スクリプト言語でよくある、数字を文字列に変換する関数がC++11でも提供されています。std::to_string(100)などと書くだけで数字が文字列に変換できます。
#include <iostream> #include <string> int main() { std::string str = "Holland, " + std::to_string(1945); std::cout << str << std::endl; return 0; }
ただし変換方法はおまかせで高度なフォーマット指定はできません(たぶん)。フォーマットを指定したい場合は、Cの流儀でsprintf()関数を使うか、C++の流儀でstd::ostringstreamを使います。以下は、数字777を、"00777"と0埋め5桁の文字列に変換する例です。(参考:C++ の iostream フォーマット指定早見表)
#include <iostream> #include <string> #include <sstream> #include <iomanip> int main() { int i = 777; std::ostringstream sout; sout << std::setfill('0') << std::setw(5) << i; std::string s = sout.str(); std::cout << s << std::endl; return 0; }
文字列から数字
文字列から数字に変換するにはstd::stoi()とかstd::stod()とかのシリーズを使います。stoi()は"string to int"、つまり整数型intに変換するという意味です。同様にstod()はdouble型に変換するという意味です。
以下は整数への変換例です。
#include <iostream> #include <string> int main() { int year = std::stoi("1945"); return 0; }
他のシリーズはstoi (C++11) - cpprefjp - C++ Library Referenceに載っています。
それにしてもto_string()とstoi()という名前の非対称性、どうにかならなかったんでしょうか。
動作確認
Visual Studio 2013で動作を確認しました。Cygwin + g++ 4.8.2ではなぜかエラーでコンパイルできませんでした。バグらしいですが深追いしていません。