Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengendalikan Konvensyen Barisan Baharu Bercampur dalam C Menggunakan `std::ifstream`?
Mengendalikan Konvensyen Baris Baharu Berbeza dengan std::ifstream
Walaupun masa jalan C biasanya mengendalikan konvensyen baris baharu berdasarkan platform, terdapat keadaan di mana fail teks yang mengandungi pelbagai format baris baharu perlu diproses secara seragam. Artikel ini meneroka cara untuk mencapai ini menggunakan std::ifstream.
Masalahnya
getline(istream&, string&) menjangkakan aksara 'n' menandakan berakhirnya baris, tetapi fail teks mungkin mengandungi 'r', 'n', atau kedua-duanya dalam kombinasi yang berbeza-beza. Jika aksara 'r' mendahului 'n', ia boleh disertakan dalam baris yang diambil, menyebabkan ketidakkonsistenan.
Penyelesaian
Tiada pilihan dalam pembina ifstream untuk menukar pelbagai pengekodan baris baharu kepada 'n' secara langsung. Walau bagaimanapun, fungsi tersuai boleh dibuat untuk mengendalikan situasi ini:
std::istream& safeGetline(std::istream& is, std::string& t) { // ... Implementation here (see below) ... }
Butiran Pelaksanaan
Fungsi safeGetline menggunakan streambuf untuk membaca aksara satu demi satu, menyediakan kecekapan yang lebih baik daripada menggunakan std::istream secara langsung. Ia berulang melalui strim, mengendalikan konvensyen baris baharu yang berbeza:
Ujian Program
Contoh program ujian menunjukkan penggunaan fungsi safeGetline:
int main() { // Open a file and check for errors. int n = 0; std::string t; while (!safeGetline(ifs, t).eof()) ++n; std::cout << "The file contains " << n << " lines." << std::endl; return EXIT_SUCCESS; }
Kesimpulan
Menggunakan fungsi safeGetline menghapuskan keperluan untuk pengendalian baris baharu secara manual dan memastikan pengambilan baris yang konsisten merentas konvensyen baris baharu yang berbeza. Pendekatan ini menyediakan penyelesaian yang teguh dan fleksibel untuk memproses fail teks yang berasal daripada pelbagai sumber.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Konvensyen Barisan Baharu Bercampur dalam C Menggunakan `std::ifstream`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!