数字と数値を互いに変換したい時は結構あります。今までもatoi、sscanf、sprintfなどを使うことにより出来ましたが、これらはC言語からの機能ということもあり、少しC++チックではありません。 #include <iostream> #include <string> using namespace std; int main() { //string⇒int型への変換 cout << stoi("123") << endl; cout << stoi("-456") << endl; return 0; } stoi関数は第一引数にstring型を受け取り、そのstring型にある数字をint型の数値に変換して返します。 #include <iostream> #include <string> using namespace std; int main() { //string⇒int型への変換 cout << stoi("2147483647") << endl; //string⇒long型への変換 cout << stol("2147483647") << endl; //string⇒unsigned long型への変換 cout << stoul("-1") << endl; //string⇒long long型への変換 cout << stoll("9223372036854775807") << endl; //string⇒unsigned long long型への変換 cout << stoull("-1") << endl; //string⇒float型への変換 cout << stof("3.4E+38") << endl; //string⇒double型への変換 cout << stod("1.7E+308") << endl; return 0; } ここで入れている文字列は、それぞれの型が表現出来る最大値になっています(unsigned系は面倒なので-1で表現) この文字列⇒数値変換の関数には第一引数以外にも引数が用意されており、 #include <iostream> #include <string> using namespace std; int main() { string str{"123N456"}; size_t pos; //変換と同時に変換不可だった場所の取得 cout << stoi(str, &pos) << endl; //変換不可能な場所があったらその文字を表示 if(pos < str.size()) { cout << str[pos] << endl; } //16進数から変換 cout << stoi("0xFF", nullptr, 16) << endl; //8進数から変換 cout << stoi("077", nullptr, 8) << endl; return 0; } 第二引数は、変換出来なかった文字があった場合のその位置を返します(VS2013の場合ですが、全部変換出来た場合はその文字列の長さを返すようです) 次に、数値を文字列に変換する方法を紹介します。 #include <iostream> #include <string> using namespace std; int main() { string str; //整数⇒文字列変換 str = to_string(123); cout << str << endl; //浮動小数点数⇒文字列変換 str = to_string(123.45); cout << str << endl; return 0; } to_string関数は、数値をstring型にしたもを返す関数です。使い方もシンプルで単純に引数に変換したい数値を渡すだけです。 紹介したstoi系、to_stringを組み合わせれば、外部ファイルとの読み書き時の数字⇒数字が楽になると思います(ただし、to_stringは16進数や指数表現などを10進数に修正した後変換するため、その形を保ったまま変換したい場合は自分で実装が必要) |