Heim >Backend-Entwicklung >C++ >Können „cin' von C benutzerdefinierte Trennzeichen verwenden?
Benutzerdefinierte Trennzeichen für C 's cin
Problem:
Bei Verwendung von cin nach der Umleitung Wenn Sie es in einen Dateistream übertragen (über cin.rdbuf(inF.rdbug())), liest es, bis ein Leerzeichen erreicht ist. Ist es möglich, ein alternatives Trennzeichen zu verwenden?
Antwort:
Ja, es ist möglich, das Trennzeichen zwischen Wörtern für cin (oder einen anderen Standard) zu ändern: istream) mit std::ios_base::imbue und einer benutzerdefinierten Ctype-Facette.
Eine benutzerdefinierte Facette, die Doppelpunkte behandelt (:) und Zeilenumbrüche als Leerzeichen können zum Lesen von Dateien wie /etc/passwd verwendet werden, in denen Felder durch Doppelpunkte getrennt sind.
#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"; } }
Durch Anwenden dieser benutzerdefinierten Facette auf den Eingabestream wird cin nun interpretieren Doppelpunkte und Zeilenumbrüche als Worttrennzeichen, die die Trennung von Feldern in Dateien wie /etc/passwd.
ermöglichenDas obige ist der detaillierte Inhalt vonKönnen „cin' von C benutzerdefinierte Trennzeichen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!