::Hikaru's blog

調べたこと, 考えたことをメモ.
<< October 2017 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>

スポンサーサイト

一定期間更新がないため広告を表示しています

- | permalink | - | -
<< DLLの遅延読み込みをフックする | main | 数値をカンマ区切りの文字列に変換する - その2 >>

数値をカンマ区切りの文字列に変換する

数値をカンマ区切りの文字列に変換する。
(pszBuffのサイズチェックなし)

IntToStrWithComma(szBuff, -10000);
結果:-10,000
TCHAR* IntToStrWithComma(TCHAR* pszBuff, int nValue) { TCHAR* pCurrent = pszBuff; if (nValue < 0) *pCurrent++ = _T('-'); int nAbsValue = abs(nValue); int nCount = 0; int nD = 1; while (nAbsValue / nD >= 10) { nCount++; nD *= 10; } do { *pCurrent++ = nAbsValue / nD + _T('0'); nAbsValue -= nAbsValue / nD * nD; nD /= 10; if (nCount % 3 == 0) *pCurrent++ = _T(','); } while (nCount-- > 0); *--pCurrent = _T('¥0'); return pszBuff; }
C, C++ | permalink | comments(5) | trackbacks(0)

スポンサーサイト

- | permalink | - | -

この記事に対するコメント

std::string使ったらもっとシンプルになるだろうにー
akihiro | 2006/04/18 7:55 PM
ほう、ちょっと考えてみます。
hikaru | 2006/04/19 9:14 AM
力不足でした…。
std::stringだとどうやるのか教えて!
hikaru | 2006/04/19 2:39 PM
std::basic_string<TCHAR> IntToStrWithComma(int nValue)
{
 std::basic_string<TCHAR> str;
 int nAbsValue = abs(nValue);
 int nCount = 0;

 do {
  str.insert(0, 1, static_cast<char>(nAbsValue % 10 + _T('0')));
  nAbsValue /= 10;
  if (++nCount % 3 == 0 && nAbsValue > 0)
   str.insert(0, 1, _T(','));
 } while (nAbsValue > 0);

 if (nValue < 0) str.insert(0, 1, _T('-'));
 return str;
}
akihiro | 2006/06/15 8:12 PM
余計長くなってしまった。

struct mycomp {
  int _n;
  mycomp() : _n(0) {}
  bool operator()(TCHAR c1, TCHAR c2) { return ++_n % 4 == 0; }
};

std::basic_string<TCHAR> IntToStrWithComma(int nValue)
{
  TCHAR szBuff[64];
  std::basic_string<TCHAR> str1(_itot(nValue, szBuff, 10));
  std::basic_string<TCHAR> comma = std::basic_string<TCHAR>((_tcslen(szBuff) - 1) / 3, _T(',')) + _T('¥0');
  std::merge(str1.rbegin(), str1.rend(), comma.begin(), comma.end(), szBuff, mycomp());
  std::reverse(szBuff, szBuff + _tcslen(szBuff));
  return std::basic_string<TCHAR>(szBuff);
}
hikaru | 2006/06/16 2:58 PM
コメントする









この記事のトラックバックURL
http://hikarukaru.jugem.cc/trackback/84
この記事に対するトラックバック