C++数値の3桁区切り
三桁で区切って 1,000,000 って表示したい!
ってことでググりました。
こちら↓の方のものを使わせてもらったんですが
とあるソフトウェアエンジニアのブログ
std::string formatNumber(int num) { std::vector<int> sepnum; int number = abs(num); int sgn = num >= 0 ? 1 : -1; while ( number / 1000 ) { sepnum.push_back(number % 1000); number /= 1000; } std::stringstream ss; ss << number * sgn; for ( std::vector<int>::reverse_iterator i = sepnum.rbegin(); i < sepnum.rend(); i++ ) { ss << "," << std::setfill('0') << std::setw(3) << *i; } return std::string(ss.str()); }
知らないものが沢山Σ(゚Д゚ ;)
ってことで調べました。
std::stringstream
そのまま文字列ストリームなんだが、
"<<" で色々な型を文字列化してくれる。
中はこんな感じでいろんな方を受け取れるようになってる
ostream& operator<< (bool& val ); ... ostream& operator<< (ostream& out, char c );
イテレーターは長いので別記事でー
std::setfill('0') << std::setw(3)
std::stringstreamに << して何かごちゃごちゃしてるんだか。そもそもこれらは↓
- 入出力マニピュテータという特殊な関数
- マニピュレータとは、iostream に挿入したり、iostream から抽出したりする値で特別な効果を持つもの
で結構種類がある。
std::cout << "aaa" << std::endl;
の endlもそーなのねー
他の種類はこちら
std::setfill('0')
は引数で指定した文字列で埋める
std::setw(3)
は3つの幅とれよー
ってことで
000 が確保されるんだと。
そこに << 2 とかやると
002になる!
理解!!