自定义 C 语言输入流的分隔符
使用“cin”从文件流读取输入时,单词提取的默认分隔符是空白。虽然这种行为在大多数情况下就足够了,但可能会出现需要替代分隔符的情况。本文演示了如何使用“std::ios_base::imbue”函数更改“cin”的字间分隔符。
为了说明这一点,请考虑读取格式类似于“/etc/”的文件的示例。 passwd”,其中每个字段由冒号 (:) 分隔。以下 C 程序利用“std::ios_base::imbue”函数将冒号字符重新定义为空白分隔符:
#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"; } }
此程序,当呈现“/etc/passwd”格式的输入时,将成功读取并输出用冒号分隔的每个字段。 “colon_is_space”结构重新分配冒号字符以将其视为空白字符,从而允许“cin”将其视为分隔符。
以上是如何在 C 中自定义输入流的分隔符?的详细内容。更多信息请关注PHP中文网其他相关文章!