Heim >Backend-Entwicklung >C++ >Wie kann ich Eingabestream-Trennzeichen in C anpassen?

Wie kann ich Eingabestream-Trennzeichen in C anpassen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-19 07:34:09686Durchsuche

How Can I Customize Input Stream Delimiters in C  ?

Anpassen von Eingabestream-Trennzeichen in C

Eingabestreams, wie der Standardeingabestream std::cin, verwenden Leerzeichen als Trennzeichen von Standard. Was aber, wenn Sie ein alternatives Zeichen als Trennzeichen verwenden müssen?

Leider bietet die C-Standardbibliothek keine einfache Möglichkeit, das Trennzeichen für std::cin zu ändern. Es gibt jedoch eine Problemumgehung, indem die Funktion std::ios_base::imbue verwendet wird, um eine benutzerdefinierte Ctype-Facette hinzuzufügen.

Der folgende Code zeigt, wie man das Trennzeichen für std::cin in den Doppelpunkt ändert und so effektiv liest durch Trennzeichen getrennte Wörter im Stil von /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 &amp;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";
  }
}

In diesem Code wird die Klasse colon_is_space als benutzerdefinierter ctype definiert Facette, die den Doppelpunkt (':') und den Zeilenumbruch ('n') als Leerzeichen identifiziert. Indem wir diese Facette in std::cin integrieren, erweitern wir die Erkennung von Leerzeichen effektiv um den Doppelpunkt.

Wenn Sie also std::cin >> Operator liest er Wörter, die durch Doppelpunkte getrennt sind. Dadurch können Sie Datendateien, die einem durch Doppelpunkte getrennten Format folgen, problemlos analysieren.

Das obige ist der detaillierte Inhalt vonWie kann ich Eingabestream-Trennzeichen 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