int型からString型へのキャスト
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int main(){
//次の2ステップで変換する
// ① int 型から char 型への変換
int t= 10;
char t_char[10];
//sprintf(t_char, "%d", t);
sprintf_s(t_char, "%d", t);
printf(t_char);
// ② char 型から string 型への変換
string t_string = "";
t_string += t_char;
cout << t_string << endl;
}
「sprintf」を使用すると次のようなwarningが出るので、「sprintf_s」を使う
warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
以下昔のはなし
トロポリス法を用いた、カノニカル集団の計算(3次元)でファイルの出力時に、int型からString型へのキャストが必要である。
int rho_step, T_step, t-t_0
を利用して、ファイル名が「position(1-2-100).data」みたいな形で保存する場合を考える。
①ostringstream型変数(fname)を宣言する
②文字列を代入する(<<)
③String型変数(fname2)を宣言し、ostringstream型変数もメンバ関数(str())を用いて、String型文字列として代入する。
④String型文字列をメンバ関数(c_str())を用いてC言語のCHAR型の文字列へ変換し、ファイル名としてofstreamを利用しファイルを開く。
もっとスマートなやり方があれば教えてください。
#include <sstream>
・・・
std::ostringstream fname;
fname << "data/position(" << rho_step <<"-" << T_step << "-" << t-t_0<< ").data";
string fname2 = fname.str();
ofstream fout_position;
fout_position.open(fname2.c_str());
for(int n=0; n<N; n++){
fout_position << R[n][0] << " " << R[n][1]<< " " << R[n][2] << endl;
}
fout_position.close();
もっと昔は...
ostringstream型を知らなかったので、int型をCHAR型にsprintf関数を用いて代入し、String型変数に+演算子でキャストしていた。
char name1[10],name2[10];
string kk,kk0="";
kk = "";
kk0 = "";
sprintf(name1, "%d", T_step);
sprintf(name2, "%d", ave);
kk = kk0 + "position(" + name1 + "-" + name2 + quot;).data";
ofstream fout_position;
fout_position.open(kk.c_str());
for(int n=0; n<N; n++){
fout_position << R[n][0] << " " << R[n][1] << " quot; << R[n][2] << endl;
}
fout_position.close();



