std::basic_istream<CharT,Traits>::get
提供: cppreference.com
< cpp | io | basic istream
int_type get(); |
(1) | |
basic_istream& get( char_type& ch ); |
(2) | |
basic_istream& get( char_type* s, std::streamsize count ); |
(3) | |
basic_istream& get( char_type* s, std::streamsize count, char_type delim ); |
(4) | |
basic_istream& get( basic_streambuf& strbuf ); |
(5) | |
basic_istream& get( basic_streambuf& strbuf, char_type delim ); |
(6) | |
ストリームから文字を抽出します。
すべてのバージョンが UnformattedInputFunction として動作します。 sentry オブジェクトの構築および確認の後、以下のように動作します。
2) 文字をひとつ読み込み、利用可能であればそれを
ch
に格納します。 そうでなければ、 ch
は変更されず、 failbit および eofbit をセットします。 書式付き文字入力の operator>> と異なり、この関数は signed char および unsigned char 型に対してオーバーロードしていないことに注意してください。3) get(s, count, widen('\n')) と同じです。 つまり、 '\n' が見つかるまで最大 count-1 個の文字を読み込み、それを
s
の指す文字列に格納します。4) 文字を読み込み、それを最初の要素が
s
によって指されている文字配列の連続する位置に格納します。 文字は以下のいずれかが発生するまで抽出され格納されます。- count-1 個の文字が格納された。
- 入力シーケンスでファイル終端状況が発生した (setstate(eofbit) が呼ばれます)。
- 次の利用可能な入力文字
c
が Traits::eq(c, delim) ��よって判定されるようにdelim
と等しい。 この文字は (basic_istream::getline() と異なり) 抽出されません。
- 次の利用可能な入力文字
1文字も抽出されなかった場合は setstate(failbit) を呼びます。 いずれの場合でも、
count>0
であれば、配列の連続する次の位置にヌル文字 (CharT()) が格納されます。5) get(strbuf, widen('\n')) と同じです。 つまり、 '\n' が見つかるまで利用可能な文字を読み込み、それを指定された basic_streambuf オブジェクトに挿入します。
6) 文字を読み込み、それを指定された basic_streambuf オブジェクトによって制御されている出力シーケンスに挿入します。 文字は以下のいずれかが発生するまで抽出され
strbuf
に挿入されます。- 入力シーケンスでファイル終端状況が発生した。
- 出力シーケンスへの挿入が失敗した (この場合、挿入される予定だった文字は抽出されません)。
- 次の使用可能な文字が Traits::eq(c, delim) によって判定されるように
delim
と等しい。 この文字は抽出されません。
- 次の使用可能な文字が Traits::eq(c, delim) によって判定されるように
- 例外が発生した (この場合、例外はキャッチされ、投げ直されません)。
1文字も抽出されなかった場合は setstate(failbit) を呼びます。
すべてのバージョンは gcount() の値を抽出された文字数に設定します。
目次 |
[編集] 引数
ch | - | 結果を書き込む文字への参照 |
s | - | 文字を格納する文字列へのポインタ |
count | - | s の指す文字列のサイズ
|
delim | - | 抽出を停止する区切り文字。 この文字は抽出されず、格納されません |
strbuf | - | 内容を読み込む先のストリームバッファ |
[編集] 戻り値
1) 抽出された文字、または Traits::eof()。
2-6) *this。
[編集] 例外
内部の操作が例外を投げた場合、それはキャッチされ、 badbit がセットされます。 exceptions() が badbit
に対してセットされていれば、その例外が投げ直されます。
[編集] 例
Run this code
#include <sstream> #include <iostream> int main() { std::istringstream s1("Hello, world."); char c1 = s1.get(); // reads 'H' std::cout << "after reading " << c1 << ", gcount() == " << s1.gcount() << '\n'; char c2; s1.get(c2); // reads 'e' char str[5]; s1.get(str, 5); // reads "llo," std::cout << "after reading " << str << ", gcount() == " << s1.gcount() << '\n'; std::cout << c1 << c2 << str; s1.get(*std::cout.rdbuf()); // reads the rest, not including '\n' std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n'; }
出力:
after reading H, gcount() == 1 after reading llo,, gcount() == 4 Hello, world. After the last get(), gcount() == 7
[編集] 関連項目
文字のブロックを抽出します (パブリックメンバ関数) | |
書式付きデータを抽出します (パブリックメンバ関数) | |
文字と文字配列を抽出します (関数テンプレート) |