Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menyesuaikan Pembatas untuk Strim Input dalam C?

Bagaimanakah Saya Boleh Menyesuaikan Pembatas untuk Strim Input dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-07 01:47:10283semak imbas

How Can I Customize the Delimiter for Input Streams in C  ?

Menyesuaikan Pembatas untuk Strim Input dalam C

Apabila membaca input daripada strim menggunakan operator pengekstrakan (cin), kelakuan lalai ialah untuk membaca sehingga aksara ruang putih ditemui. Walau bagaimanapun, dalam senario tertentu, mungkin perlu menggunakan pembatas tersuai.

Menukar Pembatas untuk cin

Perpustakaan standard menyediakan cara untuk mengubah suai antara- pembatas perkataan untuk aliran input, seperti cin. Ini boleh dicapai menggunakan kaedah imbue std::ios_base untuk menambah faset jenis aksara tersuai yang dipanggil ctype.

Contoh: Menggunakan Titik Bertitik sebagai Pembatas

Untuk contohnya, katakan anda mempunyai fail yang diformatkan seperti /etc/passwd, di mana setiap medan dipisahkan oleh aksara bertindih (:). Untuk membaca setiap medan secara berasingan menggunakan pembatas berasaskan titik bertindih tersuai, anda boleh menggunakan kod berikut:

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

Dalam contoh ini, faset ctype tersuai bernama colon_is_space dicipta, yang merawat aksara kolon (:) dan aksara baris baharu (n) sebagai ruang putih. Dengan menerapkan aliran input cin dengan tempat tersuai ini, operator pengekstrakan (>>) akan membaca setiap medan yang dipisahkan oleh titik bertindih.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan Pembatas untuk Strim Input dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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