Menyesuaikan Pembatas Strim Input dalam C
Strim input, seperti strim input standard std::cin, gunakan aksara ruang putih sebagai pembatas oleh lalai. Walau bagaimanapun, bagaimana jika anda perlu menggunakan aksara alternatif sebagai pembatas?
Malangnya, pustaka standard C tidak menyediakan cara mudah untuk menukar pembatas untuk std::cin. Walau bagaimanapun, terdapat penyelesaian menggunakan fungsi std::ios_base::imbue untuk menambah faset ctype tersuai.
Kod di bawah menunjukkan cara menukar pembatas untuk std::cin kepada aksara kolon, membaca dengan berkesan perkataan yang dibataskan dalam gaya /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 &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"; } }
Dalam kod ini, kelas colon_is_space ditakrifkan sebagai faset ctype tersuai yang mengenal pasti aksara bertindih (':' ) dan baris baharu ('n' ) sebagai aksara ruang. Dengan menerapkan facet ini ke dalam std::cin, kami meluaskan pengecaman aksara ruang putih dengan berkesan untuk memasukkan titik bertindih.
Akibatnya, apabila anda menggunakan std::cin >> operator, ia akan membaca perkataan yang dibatasi oleh titik bertindih. Ini membolehkan anda menghuraikan fail data dengan mudah mengikut format yang dipisahkan bertindih.
Atas ialah kandungan terperinci Bagaimanakah saya Boleh Menyesuaikan Pembatas Strim Input dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!