Maison > développement back-end > C++ > Comment puis-je personnaliser les délimiteurs pour les flux d'entrée en C ?

Comment puis-je personnaliser les délimiteurs pour les flux d'entrée en C ?

Linda Hamilton
Libérer: 2024-12-08 10:48:14
original
713 Les gens l'ont consulté

How Can I Customize Delimiters for Input Streams in C  ?

Personnalisation des délimiteurs pour les flux d'entrée en C

Lors de la lecture d'une entrée à partir d'un flux de fichier à l'aide de "cin", le délimiteur par défaut pour l'extraction de mots est espace blanc. Bien que ce comportement soit suffisant dans la plupart des cas, des scénarios peuvent survenir dans lesquels des délimiteurs alternatifs sont requis. Cet article montre comment modifier le délimiteur inter-mots pour "cin" à l'aide de la fonction "std::ios_base::imbue".

Pour illustrer, considérons l'exemple de la lecture d'un fichier formaté comme "/etc/ passwd", où chaque champ est séparé par deux points (:). Le programme C suivant exploite la fonction "std::ios_base::imbue" pour redéfinir le caractère deux-points en tant que délimiteur d'espaces :

#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

Ce programme, lorsqu'il est présenté avec une entrée au format "/etc/passwd" , lira et affichera avec succès chaque champ séparé par deux points. La structure "colon_is_space" réaffecte le caractère deux-points pour qu'il soit traité comme un caractère d'espacement, permettant à "cin" de le traiter comme un délimiteur.

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