[解決済み] クラスstringstream。lineStreamの動作、パラメータが理解できない。
質問事項
私は以下のコードを持っていて、それがどのように動作し、何をするのか知っています、しかし、全く知りません。この3行がどのように機能するのか理解できません。 std::stringstream lineStream(line); std::stringセル; std::getline(lineStream, cell, ';') 特にlineStreamの方。 googleで検索してみましたが、十分な説明がありません。これらの挙動を説明していただくか、良いリンク先を教えていただけませんか?ありがとうございます、良い一日を:)
container *begin = new container;
begin->beginBox = new box;
container *last = NULL;
std::ifstream data(filename);
std::string line;
std::getline(data, line);
for (container *i = begin; !data.eof() && std::getline(data, line);)
{
std::stringstream lineStream(line);
std::string cell;
std::getline(lineStream, cell, ';');
i->ID = atoi(cell.c_str());
for (box *j = i->beginBox; std::getline(lineStream, cell, ';'); j->next = new box, j = j->next)
{
j->apples = atoi(cell.c_str());
i->lastBox = j;
}
i->lastBox->next = NULL;
i->nextCont = new container(), last = i, i = i->nextCont, i->beginBox = new box;
}
setAutoIncrement(begin->ID + 1);
last->nextCont = NULL;
return begin;
解決方法は?
std::stringstream lineStream(line);
という変数を宣言しています。
lineStream
型の
std::stringstream
. これは
line
の文字列を
そのコンストラクタ (2)
. その
std::stringstream
型は、文字列をストリームインターフェースでラップしています。つまり、以下のように扱うことができます。
cout
と
cin
を使用しています。
<<
と
>>
を使って、文字列から何かを挿入したり取り出したりすることができます。ここでは
lineStream
が作成され、後でその中身を取り出すには
std::getline
.
std::string cell;
これは単に空の
std::string
という
cell
.
std::getline(lineStream, cell, ';');
機能
std::getline
(1)
は、最初の引数として、行を抽出するストリームを受け取ります。第二引数は
std::string
に行を展開する。第3の引数がない場合、行の終わりは改行文字があるところとみなされます。しかし、第3の引数を渡すことで、このコードは行の終わりを
;
. つまり、この
std::getline
を見つけるまで、ストリームからすべてを抽出します。
;
文字に変換し、その内容を
cell
. その
;
文字は破棄されます。
これはすべて、上記のコードと非常によく似ています。
std::ifstream data(filename);
std::string line;
std::getline(data, line);
ここでは、ストリームは文字列ストリームではなく、ファイルストリームであり
std::getline
は、第3引数が与えられていないため、改行文字までのすべてを抽出します。
関連
-
[解決済み】構造体のベクター初期化について
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 派生クラス関数から親クラス関数を呼び出すには?
-
[解決済み] Android: リソースから名前を使って文字列を取得するには?
-
[解決済み] ストリングストリーム変数をクリアするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】'std::cout'への未定義の参照