Maison >développement back-end >C++ >Comment puis-je personnaliser le délimiteur des flux d'entrée en C ?

Comment puis-je personnaliser le délimiteur des flux d'entrée en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-07 01:47:10283parcourir

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

Personnalisation du délimiteur pour les flux d'entrée en C

Lors de la lecture de l'entrée d'un flux à l'aide de l'opérateur d'extraction (cin), le comportement par défaut est à lire jusqu'à ce qu'un caractère d'espacement soit rencontré. Cependant, dans certains scénarios, il peut être nécessaire d'utiliser un délimiteur personnalisé.

Changer le délimiteur pour cin

La bibliothèque standard fournit un moyen de modifier l'inter- délimiteur de mots pour les flux d'entrée, tel que cin. Ceci peut être réalisé en utilisant la méthode imbue de std::ios_base pour ajouter une facette de type de caractère personnalisée appelée ctype.

Exemple : Utiliser un deux-points comme délimiteur

Pour Par exemple, supposons que vous ayez un fichier formaté comme /etc/passwd, où chaque champ est séparé par un caractère deux-points (:). Pour lire chaque champ séparément à l'aide d'un délimiteur personnalisé basé sur deux points, vous pouvez utiliser le code suivant :

#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";
  }
}

Dans cet exemple, une facette ctype personnalisée nommée colon_is_space est créée, qui traite le caractère deux-points (:) et le caractère de nouvelle ligne (n) comme espace. En imprégnant le flux d'entrée cin de ces paramètres régionaux personnalisés, l'opérateur d'extraction (>>) lira chaque champ séparé par deux points.

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!

Déclaration:
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