- ベストアンサー
整数型からstring型への変換
コンパイラはgcc4.0.3、OSはubuntuを使っています。 整数型の変数をstring型に変換したいのですが、 どのようにしたらよいでしょうか? itoaは無いみたいです。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
もしもC++のstd::string型を想定しているなら、 <sstream>ヘッダのstd::ostringstreamをどうぞ。
その他の回答 (7)
- MrBan
- ベストアンサー率53% (331/615)
最終的にfilenameという名のstringが欲しい? 多分、一般的な用法(?)はこんな感じでは。 int i; // 何かの数字 std::string file; // 何かの文字列 std::ostringstream oss; oss << file << i; std::string filename = oss.str(); 元の例だと、多分こんな?(申し訳ない。コンパイルは確認してません) std::string filename=file; int i; std::ostringstream num; num << i; filename += num.str(); // std::ostringstream⇒std::stringは暗黙で変換できません。str()使ってください。 # ちなみにlexical_castは内部でこのあたりをやってくれるラッパー
お礼
完全解決いたしました。 お手数おかけいたしました。
- MrBan
- ベストアンサー率53% (331/615)
"std"は標準の名前空間なのでとりあえず外して "ostringstream"だけでGoogle検索するといっぱい出ます。 なお、boost::lexical_castも便利ですが、言語標準ではないので、 boostというC++の有名なライブラリ群を別途用意する必要があります。 # boostは非常に有益、または愉快なライブラリです。
- 参考URL:
- http://www.boost.org
お礼
ありがとうございます。変換はできたようです。 ついでなのですが(といいますか、こちらが本命で、 この質問の内容が実行可能になればできるかと思ったのですが、 できませんでした。)、 整数型の変数iを int i; std::ostringstream ostr; ostr << i; にしたがって変換した後、 string型の変数の後ろにくっつけるというのはどうすればよいのでしょうか? append()、+=などの演算が使えるということでしたが、 コンパイルエラーになってしまいます。 例えば、 std::string filename=file; int i; std::ostringstream num; num << i; filename.append(num); のようにすると、 invalid conversion from ‘void*’ to ‘const char*’ のようなエラーがでてしまいます。
- jacta
- ベストアンサー率26% (845/3158)
#4です。 > スカラ型というのは算術ORポインタ型ですよね。 > 整数型をstringに変えたいのですが、 > キャストが可能であるということは、例えば、 typedef char *string; string s = (string)1234; とすることは可能だという意味です。 これが役に立つかどうかは別として... 言語がC++で、string型というのがstd::stringのことなら、最初からそう書きましょう。 その場合には、既に回答が出ているように、std::ostringstreamを使うのが正解です。
- koko_u_
- ベストアンサー率18% (459/2509)
boost::lexical_cast<T> でもええの?
お礼
ありがとうございます。 boost::lexical_cast<std::string>は宣言されていないようです。 ‘lexical_cast’ was not declared in this scope というコンパイルエラーになってしまいます。
- jacta
- ベストアンサー率26% (845/3158)
string型というのはtypedef名でしょうか? もし、string型に定義内容がスカラ型であれば、単にキャストすれば変換が可能です。ただし、質問者さんが期待している動作になるかどうかは別問題です。
お礼
ありがとうございます。 ちょっと意味が分からないのですが、 スカラ型というのは算術ORポインタ型ですよね。 整数型をstringに変えたいのですが、 キャストが可能であるということは、例えば、 std::string filename=moji[1]; int A=123; filename+=(string)A; というのが可能であるということでしょうか? 試しにやってみたのですが、 invalid conversion from ‘int’ to ‘const char*’ というコンパイルエラーになってしまいます。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★最初にC言語には『string型』はありません。 ・その代わりに文字列を文字型の配列で表現します。 文字列の最後には NULL 文字が終端として必ず追加されます。 よって『ABC』という文字列は『A』『B』『C』『\0』という4バイトで 表現されます。 ・それで整数型を文字列に変換するには『sprintf』関数を使って変換します。 『sprintf』関数は書式制御(変換指定)を(%)文字で指定します。 下に使い方を載せます。 使い方: char buff[ 64 ]; int value = 12345; sprintf( buff, "%d", value ); 最後に: ・『%o』⇒8進表記で文字列に変換します。 ・『%d』⇒10進表記で文字列に変換します。 ・『%x』⇒16進表記で文字列(小文字)に変換します。 ・『%X』⇒16進表記で文字列(大文字)に変換します。 ・なお 2 進表記で文字列に変換する指定はありません。 この場合は 2 進表記に変換する処理(関数など)を自作します。 過去に『printf で二進表示を行いたい。』という質問がありました。→http://oshiete1.goo.ne.jp/qa2779731.html 自作するときは上記の質問・回答を参考にして下さい。→回答者 No.2 です。 ・以上。おわり。→下の『参考URL』もどうぞ。
補足
書き忘れてましたが、言語はC++です。
- yaemon_2006
- ベストアンサー率22% (50/220)
"sprintf"は?
補足
書き忘れてましたが、言語はC++です。
お礼
ありがとうございます。 ぐぐっても、std::ostringstreamは日本語で5件しか出てきません。 整数→stringという変換はかなりマニアックなのでしょうか。 英語でも探してみます・・・