Heim >Backend-Entwicklung >C++ >Können „cin' von C benutzerdefinierte Trennzeichen verwenden?

Können „cin' von C benutzerdefinierte Trennzeichen verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-18 16:11:11481Durchsuche

Can C  's `cin` Use Custom Delimiters?

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 &amp;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öglichen

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn