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 &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!