Lorsque vous travaillez avec des flux d'entrée en C, il est courant d'utiliser 'cin' pour lire les entrées de l'utilisateur. Par défaut, 'cin' traite les caractères d'espacement comme des délimiteurs, séparant les mots ou les jetons. Que faire si vous devez utiliser un délimiteur différent ?
Bien que l'API de la bibliothèque standard C ne fournisse pas explicitement de méthode pour modifier le délimiteur de « cin », il est possible d'y parvenir en utilisant « std : » Fonction ios_base::imbue'.
'std::ios_base::imbue' vous permet d'ajouter une facette 'ctype' personnalisée à l'entrée flux. Les facettes Ctype définissent le comportement de classification des caractères pour une locale donnée.
Voici un exemple qui montre comment remplacer le délimiteur par le caractère 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 &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, 'colon_is_space', est créée. Cette facette classe les caractères deux-points (':') et de nouvelle ligne ('n') comme des espaces.
En imprégnant le flux d'entrée d'un paramètre régional à l'aide de cette facette personnalisée, nous modifions effectivement le délimiteur de « cin » en le côlon. Par conséquent, lors de la lecture d'une entrée à l'aide de l'opérateur d'extraction (>>), les deux points seront traités comme un séparateur.
Cette technique peut être utilisée pour gérer les formats d'entrée qui utilisent des caractères autres que des espaces comme délimiteurs. .
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!