Menyesuaikan Pembatas untuk Strim Input dalam C
Apabila membaca input daripada strim fail menggunakan "cin," pembatas lalai untuk pengekstrakan perkataan ialah ruang kosong. Walaupun tingkah laku ini mencukupi dalam kebanyakan kes, senario mungkin timbul apabila pembatas alternatif diperlukan. Artikel ini menunjukkan cara menukar pembatas antara perkataan untuk "cin" menggunakan fungsi "std::ios_base::imbue".
Untuk menggambarkan, pertimbangkan contoh membaca fail yang diformatkan seperti "/etc/ passwd," di mana setiap medan dipisahkan oleh titik bertindih (:). Program C berikut memanfaatkan fungsi "std::ios_base::imbue" untuk mentakrifkan semula aksara kolon sebagai pembatas ruang putih:
#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"; } }
Program ini, apabila dibentangkan dengan input berformat "/etc/passwd" , akan berjaya membaca dan mengeluarkan setiap medan yang dipisahkan oleh titik bertindih. Struktur "colon_is_space" menetapkan semula aksara kolon untuk dianggap sebagai aksara ruang putih, membenarkan "cin" menganggapnya sebagai pembatas.
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!