首页 >后端开发 >C++ >如何在 C 中自定义输入流的分隔符?

如何在 C 中自定义输入流的分隔符?

Linda Hamilton
Linda Hamilton原创
2024-12-08 10:48:14711浏览

How Can I Customize Delimiters for Input Streams in C  ?

自定义 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 &amp;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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn