Rumah > pembangunan bahagian belakang > C++ > Bolehkah `cin` C Menggunakan Pembatas Tersuai?

Bolehkah `cin` C Menggunakan Pembatas Tersuai?

Barbara Streisand
Lepaskan: 2024-12-18 16:11:11
asal
486 orang telah melayarinya

Can C  's `cin` Use Custom Delimiters?

Pembatas Tersuai untuk C cin

Masalah:

Apabila menggunakan cin selepas mengubah hala ia ke aliran fail (melalui cin.rdbuf(inF.rdbug())), ia dibaca sehingga mencapai watak ruang putih. Adakah mungkin untuk menggunakan pembatas alternatif?

Jawapan:

Ya, adalah mungkin untuk menukar pembatas antara perkataan untuk cin (atau mana-mana std lain:: istream) menggunakan std::ios_base::imbue dan faset ctype tersuai.

Faset tersuai yang merawat titik bertindih (:) dan baris baharu sebagai aksara ruang putih boleh digunakan untuk membaca fail seperti /etc/passwd, di mana medan dipisahkan oleh titik bertindih.

#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";
  }
}
Salin selepas log masuk

Dengan menggunakan aspek tersuai ini pada strim input, cin kini akan tafsir titik bertindih dan baris baharu sebagai pembatas perkataan, membenarkan pengasingan medan dalam fail seperti /etc/passwd.

Atas ialah kandungan terperinci Bolehkah `cin` C Menggunakan Pembatas Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan