C 的 cin 的自定义分隔符
问题:
重定向后使用 cin 时它到文件流(通过cin.rdbuf(inF.rdbug())),它会读取直到到达空白字符。是否可以使用替代分隔符?
答案:
是的,可以更改 cin (或任何其他 std::)的字间分隔符istream) 使用 std::ios_base::imbue 和自定义 ctype 方面。
处理的自定义方面冒号 (:) 和换行符作为空白字符可用于读取 /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中文网其他相关文章!