strstream に区切り文字を追加 – プログラミング – Home

strstream に区切り文字を追加
 
通知
すべてクリア

strstream に区切り文字を追加


f_take2000
 f_take2000
(@f_take2000)
ゲスト
結合: 21年前
投稿: 18
Topic starter  

strstream に文字列を入力したあと、複数の変数に取りだしたいのですが、デフォルトで
は、区切り文字が、スペースと改行のみです。この区切り文字を追加したいのですが、
(たとえば、コンマなど)できるのでしょうか?
よろしくお願いします。
例)
char hoge[100];
int i1,i2,i3;
strstream cStrStrm(ch,100,ios::out|ios::in);

cStrStrm << 1 2 3<<ends;
// この場合は、うまく取り出せる。
cStrStrm >> i1 >> i2>> i3;

//でも、次のように、コンマ区切りの文字列は、うまくいかない。
cStrStrm <<1,2,3<<ends;
// これは、だめ!
cStrStrm >> i1>>i2>>i3;

環境は、Windows2000 vc++6.0です。


引用解決済
トピックタグ
amn
 amn
(@amn)
ゲスト
結合: 21年前
投稿: 2
 

strstream より stringstream の方が(バッファ長を自分で管理する必要が
ない分だけ)楽につかえるかと思います。

それはさておき、目的を達するのに別のアプローチでもよいのなら、
たとえば boost::tokenizer を使ってみてはいかがでしょうか。

http://boost.org/


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

cStrStrm << 1, 2, 3 << ends;
char comma;
cStrStrm >> i1 >> comma >> i2 >> comma >> i3;

とか。


返信引用
f_take2000
 f_take2000
(@f_take2000)
ゲスト
結合: 21年前
投稿: 18
Topic starter  

返事ありがとうございます。
やりたいことは、コマンドインタプリタみたいなことで、そのために、フォーマットクラ
スの、エラー処理と、>>演算子が使いたいのです。
はじめにかかないで、すみません。
例)
cmdname a,b,c
a,b がint
cが、string であるようなコマンド

amn さん
boost::tokenizerをみてみました。ただ、iterater のなかで、for loop の回った回数な
どで、分岐しなくては、いけないので、コードがすこし、きたなくなってしまとおもって
います。でも、これがだめなら、ちょっと検討してみます。

dairywood さん、
ユーザーに、区切り文字の前に、スペースを入れてもらうのは、ちょとかっこわるくてい
やです。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> ユーザーに、区切り文字の前に、スペースを入れてもらうのは、
> ちょとかっこわるくていやです。

cStrStrm << 1,2,3 << ends;
char comma;
cStrStrm >> i1 >> comma >> i2 >> comma >> i3;

こう書けばよかったかな?


返信引用
amn
 amn
(@amn)
ゲスト
結合: 21年前
投稿: 2
 

こんにちは。

> やりたいことは、コマンドインタプリタみたいなことで <snip>

ということであれば、boost::spirit が適しているのではないでしょうか。
ご検討の選択肢にいれてみてはいかがでしょう。

http://www.kmonos.net/alang/boost/classes/spirit.html

やその他検索すると日本語で解説したページもみつかるかと思います。


返信引用
f_take2000
 f_take2000
(@f_take2000)
ゲスト
結合: 21年前
投稿: 18
Topic starter  

返事が遅れてすみません
dairygoods-san の方法だと,コマンドの中に,stringがはいっていたりする場合に,うまくい
きません. cmdnameが、string だったりした場合.
例)hoge,1,2,3

amn-san sprits のマニュアルを,読み始めています.これは,結構すごい(変態?)。最初のイ
ントロダクションで書いてあることは,私が感じていたことなのです。いい情報ありがとうござ
いました。計算機を作って終りにならないようにします。(yacc/lex のときのように)


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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