Mengendalikan Penghujung Baris Berbeza dengan Anggun dalam std::istream::getline
Apabila membaca fail teks, menghadapi penghujung baris yang berbeza-beza seperti 'n ', 'r', dan 'rn' boleh menimbulkan cabaran. std::getline ialah fungsi yang mudah untuk mendapatkan semula baris daripada aliran input, tetapi ia mungkin meninggalkan aksara 'r' baki di hujung rentetan.
Seperti yang ditunjukkan oleh Neil, masa jalan C biasanya dilengkapi untuk mengendalikan konvensyen penamat talian berdasarkan platform. Walau bagaimanapun, kebolehoperasian antara sistem yang berbeza memerlukan pendekatan yang lebih mantap.
Berikut ialah fungsi tersuai yang memproses ketiga-tiga jenis penamat baris dengan lancar:
std::istream& safeGetline(std::istream& is, std::string& t) { t.clear(); std::istream::sentry se(is, true); std::streambuf* sb = is.rdbuf(); for(;;) { int c = sb->sbumpc(); switch (c) { case '\n': return is; case '\r': if(sb->sgetc() == '\n') sb->sbumpc(); return is; case std::streambuf::traits_type::eof(): if(t.empty()) is.setstate(std::ios::eofbit); return is; default: t += (char)c; } } }
Dalam fungsi ini, kami menggunakan objek streambuf untuk membaca aksara satu persatu dengan cekap. Setiap watak diperiksa dan berdasarkan jenisnya, tindakan yang sesuai diambil untuk mengendalikan pengakhiran baris.
Satu program ujian menggambarkan penggunaan safeGetline:
int main() { std::string path = ... // Insert path to test file here std::ifstream ifs(path.c_str()); if(!ifs) { std::cout << "Failed to open the file." << std::endl; return EXIT_FAILURE; } int n = 0; std::string t; while(!safeGetline(ifs, t).eof()) ++n; std::cout << "The file contains " << n << " lines." << std::endl; return EXIT_SUCCESS; }
Dengan menggunakan pendekatan ini, anda boleh membaca fail teks daripada pelbagai asal usul dengan yakin, memastikan pengendalian pengakhiran baris yang berbeza dengan anggun.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Penghujung Baris Berbeza dengan Anggun dalam `std::getline` C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!