Personnalisation des délimiteurs de flux d'entrée en C
Les flux d'entrée, tels que le flux d'entrée standard std::cin, utilisent des caractères d'espacement comme délimiteurs en défaut. Cependant, que se passe-t-il si vous devez utiliser un caractère alternatif comme délimiteur ?
Malheureusement, la bibliothèque standard C ne fournit pas de moyen simple de modifier le délimiteur pour std::cin. Cependant, il existe une solution de contournement en utilisant la fonction std::ios_base::imbue pour ajouter une facette ctype personnalisée.
Le code ci-dessous montre comment changer le délimiteur de std::cin en caractère deux-points, lisant efficacement mots délimités dans le style de /etc/passwd.
#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() { std::cin.imbue(std::locale(std::cin.getloc(), new colon_is_space)); std::string word; while (std::cin >> word) { std::cout << word << "\n"; } }
Dans ce code, la classe colon_is_space est définie comme un ctype personnalisé facette qui identifie les caractères deux-points (':' ) et de nouvelle ligne ('n' ) comme caractères d'espace. En intégrant cette facette dans std::cin, nous étendons efficacement la reconnaissance des caractères d'espacement pour inclure les deux points.
Par conséquent, lorsque vous utilisez std::cin >> opérateur, il lira les mots délimités par des deux-points. Cela vous permet d'analyser facilement les fichiers de données qui suivent un format 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!