Heim >Backend-Entwicklung >C++ >Wie kann ich Trennzeichen für Eingabestreams in C anpassen?

Wie kann ich Trennzeichen für Eingabestreams in C anpassen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-08 10:48:14713Durchsuche

How Can I Customize Delimiters for Input Streams in C  ?

Anpassen von Trennzeichen für Eingabestreams in C

Beim Lesen von Eingaben aus einem Dateistream mit „cin“ ist das Standardtrennzeichen für die Wortextraktion Leerzeichen. Während dieses Verhalten in den meisten Fällen ausreicht, können Szenarien auftreten, in denen alternative Trennzeichen erforderlich sind. In diesem Artikel wird gezeigt, wie Sie das Worttrennzeichen für „cin“ mithilfe der Funktion „std::ios_base::imbue“ ändern.

Betrachten Sie zur Veranschaulichung das Beispiel des Lesens einer Datei im Format „/etc/“. passwd“, wobei jedes Feld durch einen Doppelpunkt (:) getrennt ist. Das folgende C-Programm nutzt die Funktion „std::ios_base::imbue“, um den Doppelpunkt als Leerzeichentrennzeichen neu zu definieren:

#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";
  }
}

Dieses Programm, wenn es mit „/etc/passwd“-formatierten Eingaben präsentiert wird , wird jedes durch einen Doppelpunkt getrennte Feld erfolgreich lesen und ausgeben. Die Struktur „colon_is_space“ weist das Doppelpunktzeichen neu zu, damit es als Leerzeichen behandelt wird, sodass „cin“ es als Trennzeichen behandeln kann.

Das obige ist der detaillierte Inhalt vonWie kann ich Trennzeichen für Eingabestreams in C anpassen?. 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