Maison > développement back-end > C++ > Le `cin` de C peut-il utiliser des délimiteurs personnalisés ?

Le `cin` de C peut-il utiliser des délimiteurs personnalisés ?

Barbara Streisand
Libérer: 2024-12-18 16:11:11
original
475 Les gens l'ont consulté

Can C  's `cin` Use Custom Delimiters?

Délimiteurs personnalisés pour le cin de C

Problème :

Lors de l'utilisation de cin après la redirection dans un flux de fichiers (via cin.rdbuf(inF.rdbug())), il le lit jusqu'à atteindre un espace blanc. Est-il possible d'utiliser un délimiteur alternatif ?

Réponse :

Oui, il est possible de changer le délimiteur inter-mots pour cin (ou tout autre std :: istream) en utilisant std::ios_base::imbue et une facette ctype personnalisée.

Une facette personnalisée qui traite les deux-points (:) et les nouvelles lignes comme caractères d'espacement peuvent être utilisés pour lire des fichiers comme /etc/passwd, où les champs sont séparés par des deux-points.

#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";
  }
}
Copier après la connexion

En appliquant cette facette personnalisée au flux d'entrée, cin va désormais interpréter les deux-points et les nouvelles lignes comme délimiteurs de mots, permettant la séparation des champs dans des fichiers comme /etc/passwd.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal