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 &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"; } }
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!