code-1839406_640


C++でint型やfloat型などの数値を文字列に変換する方法が分からず、いくつか方法を調べたので忘備録として記録しておきます。




sprintfを使用した方法


sprintfはC++のライブラリではなくCのライブラリを使う方法で、数値から文字列変換の一番王道な方法な気がします。
#include 

int main(void){
	char iStr[50] = {0};
	char fStr[50] = {0};
	
	int iNum = 123;
	float fNum = 4.56;
	
	sprintf(iStr, "%d", iNum);
	sprintf(fStr, "%f", fNum);
	
	printf("%s\n", iStr);
	printf("%s\n", fStr);
	
	return 0;

}

ただこの方法は数値の長さがchar配列のサイズより大きい場合、バッファオーバーフローを起こす危険があるので以下のようにsnprintfを使ったほうがいいです。



snprintfを使用した方法


snprintfは上記のsprintfのバッファサイズが指定できる版です。
#include 

int main(void){
	char iStr[50] = {0};
	char fStr[50] = {0};
	
	int iNum = 123;
	float fNum = 4.56;
	
	snprintf(iStr, sizeof(iStr), "%d", iNum);
	snprintf(fStr, sizeof(fStr), "%f", fNum);
	
	printf("%s\n", iStr);
	printf("%s\n", fStr);
	
	return 0;

}







ostringstreamを使用した方法


こちらはC++のライブラリであるsstreamの中のostringstreamを使用した方法です。

char配列に変換するために「ostringstream → string → char配列」という流れがあるので少し分かりにくい方法な気がします。

ただ、fstreamとかを使い慣れている人にとっては読みやすくなるのかもしれません。
#include 
#include 
#include 

int main(void){
	std::ostringstream iOss;
	std::ostringstream fOss;
	
	int iNum = 123;
	float fNum = 4.56;
	
	iOss << iNum;
	fOss << fNum;
	
	printf("%s\n", iOss.str().c_str());
	printf("%s\n", fOss.str().c_str());
	
	return 0;

}



to_stringを使用した方法


stringクラスのto_string関数を使った方法ですが、個人的には今までの方法の中でこの方法が一番分かりやすいと思っています。

ただし、C++11以降でしか使えないという欠点があり、過去のプロジェクトでC++98などの古い言語規格を用いている場合、使用できないという欠点があります。
#include 
#include 

int main(void){
	std::string iStr;
	std::string fStr;
	
	int iNum = 123;
	float fNum = 4.56;
	
	iStr = std::to_string(iNum);
	fStr = std::to_string(fNum);
	
	
	printf("%s\n", iStr.c_str());
	printf("%s\n", fStr.c_str());
	
	return 0;

}



最後に


いくつか数値を文字列に変換する方法を書きました。

このほかにもっと良い方法があればコメントで教えていただければ助かります。