• ベストアンサー

TCHAR文字列?の特定部分の数字文字をint型の数値に変える方法

TCHAR文字列?の特定部分の数字文字をint型の数値に変える方法ですが どうすればよいでしょうか? int test(LPCTSTR s) { int a, b, c, d; /* TCHAR?型文字列を数値のintに変える方法???  a = 12の前2桁 b = 34の2桁 c = 5の最後の1桁 */ d = a + b - c; return d; } ret = test(_T("12345")); の場合、retに41が返ってきてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

数字に変換するための文字列を格納できるバッファを準備して そこに元文字列の指定位置から切り出して数値に変換します 今回の場合なら 受け取る文字列のバッファは2文字とC/C++の文字列の終端をあらわすNULL文字との3文字分が最低でも入ります int test( LPCTSTR s ) {   TCHAR buf[3];   TCHAR *p = s;   int a,b,c,d;   // 受け取り側を初期化   buf[0] = buf[1] = buf[2] = _T('\0');   // 12 をコピー   _tcsncpy( buf, p, 2 );   a = atoi( buf );   // 受け取り側を初期化   buf[0] = buf[1] = buf[2] = _T('\0');   // 34 をコピー   p += 2;   _tcsncpy( buf, p, 2 );   b = atoi( buf );   // 受け取り側を初期化   buf[0] = buf[1] = buf[2] = _T('\0');   // 5 をコピー   p += 2;   _tcsncpy( buf, p, 1 );   c = atoi( buf );   d = a + b - c;   return d; } といった具合です または sscanfを使ってもいいのであれば int test(LPCTSTR s ) {   int a, b, c, d;   // 文字列が不正だった場合の特殊な値   d = -9999;   if ( 3 == _stscanf( s, _T("%2d%2d%d"), &a, &b, &c ) ) {     d = a + b - c;   }   return d; } といった具合です

その他の回答 (2)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.3

横から失礼 > a = atoi( buf ); a = _ttoi( buf ); TCHAR型なので、atoi()ではなく、_ttoi()だと思う。

pone1
質問者

補足

ご指摘、ありがとうございます。

回答No.2

10進数5桁であるなら……。 int test (LPCTSTR s) { int val, a, b, c, d; val = (int)_tcstol(s, 0, 10); /* 数字を数値に変換 */ a = (val / 1000) % 100; b = (val / 10) % 100; c = val % 10; d = a + b - c; return d; } というのもありですね。 # エラー処理は端折っています。

参考URL:
http://msdn.microsoft.com/ja-jp/library/w4z2wdyc.aspx