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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-07 01:47:10283浏览

How Can I Customize the Delimiter for Input Streams in C  ?

在 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 &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";
  }
}

在此示例中,创建了一个名为 colon_is_space 的自定义 ctype 分面,该分面处理冒号字符 (:)和换行符 (n) 作为空白。通过将这个自定义语言环境注入输入流 cin,提取运算符 (>>) 将读取由冒号分隔的每个字段。

以上是如何在 C 中自定义输入流的分隔符?的详细内容。更多信息请关注PHP中文网其他相关文章!

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