在 C 中自定义输入流的分隔符
使用提取运算符 (cin) 从流中读取输入时,默认行为是读取直到遇到空白字符。但是,在某些情况下,可能需要使用自定义分隔符。
更改 cin 的分隔符
标准库提供了一种修改内部分隔符的方法输入流的字分隔符,例如 cin。这可以使用 std::ios_base 的 imbue 方法添加名为 ctype 的自定义字符类型构面来实现。
示例:使用冒号作为分隔符
For例如,假设您有一个格式类似于 /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"; } }
在此示例中,创建了一个名为 colon_is_space 的自定义 ctype 分面,该分面处理冒号字符 (:)和换行符 (n) 作为空白。通过将这个自定义语言环境注入输入流 cin,提取运算符 (>>) 将读取由冒号分隔的每个字段。
以上是如何在 C 中自定义输入流的分隔符?的详细内容。更多信息请关注PHP中文网其他相关文章!