C の cin のカスタム区切り文字
問題:
リダイレクト後に cin を使用する場合それをファイルストリームに(経由して) cin.rdbuf(inF.rdbug())) の場合、空白文字に達するまで読み取ります。代替の区切り文字を使用することは可能ですか?
答え:
はい、cin (またはその他の std::) の単語間の区切り文字を変更することができます。 istream) std::ios_base::imbue とカスタム ctype を使用facet.
コロン (:) と改行を空白文字として扱うカスタム ファセットを使用すると、フィールドがコロンで区切られている /etc/passwd のようなファイルを読み取ることができます。
#include <locale> #include <iostream> struct colon_is_space : std::ctype<char> { colon_is_space() : std::ctype<char>(get_table()) {} static mask const* get_table() { static mask rc[table_size]; rc[':'] = std::ctype_base::space; rc['\n'] = std::ctype_base::space; return &rc[0]; } }; int main() { using std::string; using std::cin; using std::locale; cin.imbue(locale(cin.getloc(), new colon_is_space)); string word; while (cin >> word) { std::cout << word << "\n"; } }
このカスタム ファセットを入力ストリームに適用することで、cin はコロンと改行を単語区切り文字として解釈するようになり、次のようなファイル内のフィールドを分離できるようになります。 /etc/passwd.
以上がC の `cin` はカスタム区切り文字を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。