質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

846閲覧

ストリームを、あるところで止めてまた再開する方法を教えてください

kanka

総合スコア26

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/10/26 02:41

ストリームの利用法がいまいちわからないので教えてください

ストリームは川だということで、一旦川をせき止めたりしたいです。
例えば文字列が

c++

1istringstream iss("a,bc,cd,d");

でストリームに入ったとします。
これを、aから1文字ずつ読み取って、
「,c」がきたら一旦流れを止めたいです。

ここで、

c++

1string first; 2ostringstream oss; 3oss<<なんとか<<iss;//なにかマニュピレータ的な処理をして「,c」手前で切り出したいです 4first=oss.str(); //firstにはa,bcが入っていてほしい 5oss.clear(); //streamのクリア

のようにして、firstに「,c」の手前まで読み込みたいです。(つまりa,bcがossに入る)
そして、一旦止めたストリームをまた再開させて、「,c」より後を別なところに読み出したいです。

c++

1//なんとかして 2string second; 3oss<<iss; 4second=oss.str(); //secondには「,c」より後のd,dが入っていてほしい。 5 6cout<<first<<"¥"<<second<<endl;//出力はa,bc¥d,dになっていてほしい 7

というようにしたいです。

そもそもストリームの概念を正しく理解できているのかわかりませんが、わかりやすく教えていただければありがたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

うーん、下手にストリームで頑張るより、全部読み込んでからstd::basic_string::find()で分割位置を検索してsplitしたほうがいい気がします。

C++のストリームってべつにそこまで効率的というわけでもないので。

投稿2018/10/26 07:05

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kanka

2018/10/26 08:59

そうなんですね。かなり使えるものだと思っていたらそうでもないんですね。。 ありがとうございます!
yumetodo

2018/10/26 09:27

設計が古くて内部的に効率的に実装するのが難しんですよね。std::string_viewがC++17で追加されたのでますますストリームで頑張らない傾向へ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問