在 C 中自定义输入流分隔符
输入流,例如标准输入流 std::cin,使用空格字符作为分隔符默认。但是,如果您需要使用替代字符作为分隔符怎么办?
不幸的是,C 标准库没有提供更改 std::cin 分隔符的直接方法。但是,有一个解决方法,使用 std::ios_base::imbue 函数添加自定义 ctype 方面。
下面的代码演示了如何将 std::cin 的分隔符更改为冒号字符,有效地读取/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() { std::cin.imbue(std::locale(std::cin.getloc(), new colon_is_space)); std::string word; while (std::cin >> word) { std::cout << word << "\n"; } }
在此代码中,colon_is_space 类被定义为自定义 ctype将冒号 (':') 和换行符 ('n') 字符标识为空格字符的构面。通过将此方面融入 std::cin,我们有效地将空白字符的识别扩展到包括冒号。
因此,当您使用 std::cin >>运算符,它将读取由冒号分隔的单词。这使您可以轻松解析遵循冒号分隔格式的数据文件。
以上是如何在 C 中自定义输入流分隔符?的详细内容。更多信息请关注PHP中文网其他相关文章!