HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > TIPS 集

int型からString型へのキャスト

文責:遠藤 理平 (2009年4月 2日) カテゴリ:TIPS 集(99)
#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();


▲このページのトップNPO法人 natural science トップ

▲このページのトップNPO法人 natural science トップ