- ベストアンサー
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が返ってきてほしい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
数字に変換するための文字列を格納できるバッファを準備して そこに元文字列の指定位置から切り出して数値に変換します 今回の場合なら 受け取る文字列のバッファは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)
横から失礼 > a = atoi( buf ); a = _ttoi( buf ); TCHAR型なので、atoi()ではなく、_ttoi()だと思う。
- Yune-Kichi
- ベストアンサー率74% (465/626)
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; } というのもありですね。 # エラー処理は端折っています。
補足
ご指摘、ありがとうございます。