在程序中需要將一個正整數(如123)轉換成一個固定長的串(如8位,00000123)。算法有很多了。我采用可以這個方法123+10^8=100000123,將100000123轉換成串"100000123",然后返回這個串的子串substr(1)。在這個方法當中會涉及指數的運算,C++只能作浮點數的指數運算,為提高效率使用模板元編程,將這一過程提前到編譯期完成。程序很簡單,大家看看就明白了:
????template<int?d,int?pow>
????struct?Power
????{
????????static?const?int?value?=?Power<d,pow-1>::value?*?d;
????};
????template<int?d>
????struct?Power<d,0>
????{
????????static?const?int?value?=?1;
????};
????/**
?????*?該函數將一個整數轉換成固定長度的0不齊的串,如12->"00012"
?????*/
????template<int?len>
????std::string?int_cast_zerostr(const?int?i)
????{
????????std::string?result??=?boost::lexical_cast<std::string>(Power<10,len>::value?+?i);
????????return?result.substr(1);
????}
如果要將12轉換成"00000012",可使用函數int_cast_zerostr<8>(12)。
謝謝小明的提醒,想起Boost有個format庫,所以可以這樣
????boost::format?f("%08d");
????std::string?s?=?(f%12).str();
????std::cout<<s; //s = "00000012"
不過個人更喜歡int_cast_zerostr<8>(12)方式。呵呵!