• ベストアンサー

整数型からstring型への変換

コンパイラはgcc4.0.3、OSはubuntuを使っています。 整数型の変数をstring型に変換したいのですが、 どのようにしたらよいでしょうか? itoaは無いみたいです。

noname#108554
noname#108554

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

もしもC++のstd::string型を想定しているなら、 <sstream>ヘッダのstd::ostringstreamをどうぞ。

noname#108554
質問者

お礼

ありがとうございます。 ぐぐっても、std::ostringstreamは日本語で5件しか出てきません。 整数→stringという変換はかなりマニアックなのでしょうか。 英語でも探してみます・・・

その他の回答 (7)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.8

最終的に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は内部でこのあたりをやってくれるラッパー

noname#108554
質問者

お礼

完全解決いたしました。 お手数おかけいたしました。

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.7

"std"は標準の名前空間なのでとりあえず外して "ostringstream"だけでGoogle検索するといっぱい出ます。 なお、boost::lexical_castも便利ですが、言語標準ではないので、 boostというC++の有名なライブラリ群を別途用意する必要があります。 # boostは非常に有益、または愉快なライブラリです。

参考URL:
http://www.boost.org
noname#108554
質問者

お礼

ありがとうございます。変換はできたようです。 ついでなのですが(といいますか、こちらが本命で、 この質問の内容が実行可能になればできるかと思ったのですが、 できませんでした。)、 整数型の変数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)
回答No.6

#4です。 > スカラ型というのは算術ORポインタ型ですよね。 > 整数型をstringに変えたいのですが、 > キャストが可能であるということは、例えば、 typedef char *string; string s = (string)1234; とすることは可能だという意味です。 これが役に立つかどうかは別として... 言語がC++で、string型というのがstd::stringのことなら、最初からそう書きましょう。 その場合には、既に回答が出ているように、std::ostringstreamを使うのが正解です。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.5

boost::lexical_cast<T> でもええの?

noname#108554
質問者

お礼

ありがとうございます。 boost::lexical_cast<std::string>は宣言されていないようです。 ‘lexical_cast’ was not declared in this scope というコンパイルエラーになってしまいます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

string型というのはtypedef名でしょうか? もし、string型に定義内容がスカラ型であれば、単にキャストすれば変換が可能です。ただし、質問者さんが期待している動作になるかどうかは別問題です。

noname#108554
質問者

お礼

ありがとうございます。 ちょっと意味が分からないのですが、 スカラ型というのは算術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)
回答No.2

★最初に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』もどうぞ。

参考URL:
http://www.geocities.jp/ky_webid/c/044.html
noname#108554
質問者

補足

書き忘れてましたが、言語はC++です。

回答No.1

   "sprintf"は?  

noname#108554
質問者

補足

書き忘れてましたが、言語はC++です。

関連するQ&A

  • 64ビット整数について…

    long long型を使用したいのですが、 lomg long型は64ビット整数となるのでしょうか? 32ビットOSでも使用できるのでしょうか? OS:Vine Linux3.1 コンパイラ:gcc-3.2.2 無知で申し訳ありませんが、 回答宜しく御願い致します。

  • 文字列や文字から整数への変換方法について

    文字列(string型)や文字(char型)から整数(int型など)に変換 する時のルールがよく解りません。 たとえば、キーボードから数字を打って、その入力された数字を 数値として整数型の変数に代入したい場合のやり方です。 ちょっとプログラムを作ってみました。 using System; class clmain { private static void Main() { Console.Write("1桁の整数を入れてね "); char ch = char.Parse(Console.ReadLine()); int by1 = (int)ch; int by2 = (int)char.GetNumericValue(ch); Console.WriteLine("by1 = {0}, by2 = {1}, ch = {1}", by1, by2, ch); Console.Write("整数を入れてね "); string st = Console.ReadLine(); /* by = (int)st; コンパイルエラー */ int by3 = int.Parse(st); Console.WriteLine("by3 = {0}, st = {1}", by3, st); } } まず、char型からint型への変換では、  int型変数=(int)char型変数; はコンパイルは通りますけど、実行すると全く違った値が入って しまいます。たとえば char型変数の値が "1" だと、int型変数には 49 が入ります。 int型変数 = (int)char.GetNumericValue(char型変数); と書いてようやく、思い通りの動きをしてくれます。 また、string型からint型への変換では  int型変数=(int)string型変数; はコンパイルエラーになります。 int型変数 = int.Parse(string型変数); とするとコンパイル出来て正しく動きます。 これで質問ですけど、 (1)なぜstring型とchar型で、int型への変換方法が違うのでしょうか? (2)int型変数=(int)char型変数; とすると、上に書いたように、全く 違った(希望しない)値が代入されてしまいます。これは、どういう 動きをしているのでしょうか? また、これはコンパイルエラーに なりませんけど、どういう時にこの書き方をするのでしょうか? 解る方、お願いします。

  • itoaは4バイト整数を

    数文字列に変換しますが 8バイト整数を10進数整数文字列に変換する関数はあるでしょうか? また逆にatoiのように兆単位の10進整数整数文字列を8バイト整数に変換する関数はあるでしょうか? OSは98seでコンパイラはBorland C++5.51を使っていてAPIやSTLなどでプログラミングしています

  • IntegerからStringへの変換

    お世話になっております。 簡単な事だと思うのですが教えて下さい。 Integerで宣言されている変数内の数値を String文字に変換をしたいのです。 例) 123 → "000123" のように頭に”0”を付けたいのですが どの様にすればよいですか? 単純に CStr() では出来ないと思っているのですが・・ 宜しくお願いします。

  • string型からint型への型変換

    C++で、string型からint型は、 string str; //ほかのstring型の変数から整数部分のみを切り出して来たものが入る int i; //ここにstrの中身(整数)をあらたに入れたい が定義されている下で、 char s[10]="0"; などを通して、 int length=str.length(); str.copy(s,length,0); i=atoi(s); とやる他ないのでしょうか? 初心者のつまらない質問ですが、ご教授いただけると幸です。 よろしくお願いします。

  • jspでString型からlong型への変換

    プログラミング初心者です。 jspでString型の変数strに"1050652281474"という文字を入れて、それをlongに変換(キャストっていうのかな?)したいのですが、どうすればいいのか分かりません。どなたか分かる方がいましたら教えて下さい。 お願いします。

    • ベストアンサー
    • Java
  • 【C++/CLI】int型からString型への変換

    C++/CLIにて、int型変数の値 int test1 = -1; int test2 = -10; をString型に変換し「-1」「-10」といったような文字列に、 変換しようと思っています。 String::Format( "{0:D1}", test1 ); String::Format( "{0:D2}", test2 ); といった方法で可能なのは分かったのですが、 この方法だと、Formatの引数を値の桁数に応じて変えねばなりません。 ※String::Format( "{0:D2}", test1 );  のようにすると、「-01」となってしまうため。 桁数を意識せずに、int型変数の値をそのまま文字列に変換するような 良い方法があれば、ご教示お願いできませんでしょうか?

  • System::Stringからconst charへの変換

    aという変数がSystem::String型であります。 そこで次に行いたい処理のために、const char*に変換したいのですが、下記のページを参考にプログラムしてみたのですがうまくいきませんでした。 うまくいかなかったというのはまだSystem::String型のままで変換できていなかったとエラーで出てしまいます。 そのような場合は、どのように型変換すればよいのでしょうか?

  • 小数点を整数型に変換

    ・8.7  ・14.5 ・3.456 などのデータがあり、この値を四捨五入 などをせずに 「整数2桁 + 小数5桁」に変換したいのですが、String.Formatなどで行うと意図した値になりません。 ・8.7 ⇒ 87.00000 ・14.5 ⇒ 14.50000 ・3.456 ⇒ 34.56000 何か良い方法がありましたら、アドバイスを頂けないでしょうか。 言語:C# VisualStudio 2008 以上、よろしくお願い致します。

  • double型変数値の整数部分のみ取得したい

    ご存知の方がおりましたら、教えてください。 double型変数値の整数部分のみStringで取得したいのですが、 Javaの場合、どうすれば簡単に取得できますでしょうか? (double)32000.0 ↓ (String)32000

    • ベストアンサー
    • Java

専門家に質問してみよう