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