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