Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membuat Kod C Saya Mengendalikan Penghujung Baris Baharu Berbeza dengan Teguh dalam Fail Teks?

Bagaimanakah Saya Boleh Membuat Kod C Saya Mengendalikan Penghujung Baris Baharu Berbeza dengan Teguh dalam Fail Teks?

DDD
DDDasal
2024-12-05 04:34:09606semak imbas

How Can I Make My C   Code Robustly Handle Different Newline Endings in Text Files?

Mendapat std :: ifstream dengan Anggun Mengendalikan Pelbagai Pengakhiran Baris Baharu

Pengenalan

Apabila bekerja dengan fail teks dalam C , adalah penting untuk mengendalikan pengekodan baris baharu yang berbeza dengan anggun. Artikel ini meneroka mekanisme standard C dan amalan terbaik untuk mengendalikan aksara baris baharu yang pelbagai dan menyediakan penyelesaian yang komprehensif.

Cabaran: Pengakhiran Baris Baharu Tidak Konsisten

Secara khusus, persoalan itu menimbulkan kebimbangan tingkah laku istream& getline ( istream& is, string& str ); apabila menghadapi pelbagai pengekodan baris baharu. Objektifnya adalah untuk mengelakkan pengubahsuaian yang menyusahkan pengguna sambil memastikan keserasian dengan format fail teks yang pelbagai.

Penghadan Standard C

Sementara masa jalan C secara teorinya harus mengendalikan baris baharu khusus platform konvensyen, ia tidak boleh dipercayai untuk pertukaran data merentas platform. Oleh itu, penyelesaian yang lebih mantap diperlukan.

Penyelesaian Tersuai: Fungsi safeGetline()

Untuk menangani cabaran ini, fungsi tersuai dipanggil safeGetline() diperkenalkan.

std::istream& safeGetline(std::istream& is, std::string& t)
{
    t.clear();

    // ... Implementation omitted for brevity ...

    return is;
}

Fungsi ini membaca aksara secara berulang daripada aliran input dan mengendalikan ketiga-tiga pengekodan baris baharu biasa ("r", "n", dan "rn") sewajarnya. Ia juga memastikan garisan kosong dikendalikan dengan betul.

Program Ujian

Program ujian disediakan untuk menunjukkan kefungsian fungsi safeGetline() .

int main()
{
    // ... Implementation omitted for brevity ...

    int n = 0;
    std::string t;
    while(!safeGetline(ifs, t).eof())
        ++n;
    std::cout << "The file contains " << n << " lines." << std::endl;

    return EXIT_SUCCESS;
}

Atur cara ini membaca fail teks, mengira bilangan baris sambil mengendalikan semua baris baharu dengan anggun pengekodan.

Kesimpulan

Fungsi safeGetline() menyediakan penyelesaian yang teguh untuk mengendalikan pengakhiran baris baharu yang pelbagai dalam aliran input C. Ia membolehkan pembangun menulis kod yang serasi dengan pelbagai format dan platform fail teks, meminimumkan kesulitan untuk pengguna dan memastikan pemprosesan data yang betul.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Kod C Saya Mengendalikan Penghujung Baris Baharu Berbeza dengan Teguh dalam Fail Teks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn