首页 >后端开发 >C++ >C 的 `cin` 可以使用自定义分隔符吗?

C 的 `cin` 可以使用自定义分隔符吗?

Barbara Streisand
Barbara Streisand原创
2024-12-18 16:11:11487浏览

Can C  's `cin` Use Custom Delimiters?

C 的 cin 的自定义分隔符

问题:

重定向后使用 cin 时它到文件流(通过cin.rdbuf(inF.rdbug())),它会读取直到到达空白字符。是否可以使用替代分隔符?

答案:

是的,可以更改 cin (或任何其他 std::)的字间分隔符istream) 使用 std::ios_base::imbue 和自定义 ctype 方面。

处理的自定义方面冒号 (:) 和换行符作为空白字符可用于读取 /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";
  }
}

通过将此自定义方面应用于输入流,cin 现在将将冒号和换行符解释为单词分隔符,允许分隔 /etc/passwd 等文件中的字段。

以上是C 的 `cin` 可以使用自定义分隔符吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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