istringstream – プログラミング – Home

通知
すべてクリア

[解決済] istringstream


すぺっク
 すぺっク
(@すぺっク)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

どなたかご教示をお願いします。
下記の文字列を展開したいのですが、istringstreamを使って上手くできませんか?

20080530164130001 TEST

0 - 13Byte YYYYMMDDHHMMSS(日時)をSYSTEMTIME構造体に格納
14 - 23Byte int型に格納
23 - 33Byte char型に格納
※データは前詰めで、残りはスペースで埋まってます。

上記の場合
SYSTEMTIME sysTime;
sysTime.wYear = 2008;
sysTime.wDayOfWeek = 5;
sysTime.wMonth = 5;
sysTime.wDay = 30;
(...省略)

int iId;
iId = 1;

text[] = TEXT


引用未解決
トピックタグ
IPL
 IPL
(@IPL)
ゲスト
結合: 17年前
投稿: 3
 

自力でするしかないでしょうなw


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

istringstreamをつかわなくても、
string系のクラスで、十分だとおもいますが。
string系のクラスで「CString.Format」のような関数みあたらなかったですね。
詳しくは存知の方よろしくお願いします。
ぼくは、「spintf」や「CString.Format」で0080530164130001
のようなものを一次の配列で作りますね。
必要に応じて2次配列や「CList」等にコピーすればいいと思いますが.....


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

修正
20080530164130001
ですね


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

ん?展開?
「sscanf」,「atoi」かな?
テンプレートのString系クラスについては存知の方よろしくお願いします。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> string系のクラスで「CString.Format」のような関数みあたらなかったですね。

stringクラスにCString::Formatのような関数はありません。
printfが型安全でないことをC++の設計者が嫌った結果ですから、意図的なものであり、
標準ライブラリの設計としてはostringstreamを使うことを推奨してると思います。
利便性?とのトレードオフでMSとは方針が違うということでしょうか。

必要ならC++でも旧来のsprintfが使えますし、
stringstreamなら、vsprintf等でoperator<<を作ったり、
昨今ならより型安全なBoost.format等を使うなど。

> 自力でするしかないでしょうなw

御意。
直接iomanipでがんばるよりは、こんな感じの演算子とか定義するとちょっと綺麗かと。
istream& operator >>(istream& is, SYSTEMTIME& time);
# 関連データの保持クラスに意味があるなら、その保持用クラスを作って、
# そのクラスに対してoperator >>を定義する方がより好ましいと思いますが。


返信引用
すぺっク
 すぺっク
(@すぺっク)
ゲスト
結合: 16年前
投稿: 4
Topic starter  

みなさんありがとうございます。
返信送れて申し訳ありません。

やはり素直に自力で実装します。
くだらない事でお時間取らせました。。。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました