Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menetapkan Semula Stringstream dengan Berkesan dalam C?

Bagaimana untuk Menetapkan Semula Stringstream dengan Berkesan dalam C?

DDD
DDDasal
2024-11-04 19:32:01346semak imbas

How to Effectively Reset a Stringstream in C  ?

Menetapkan Semula Stringstream Dengan Berkesan

Dalam C , rentetan ialah alat yang berharga untuk memanipulasi dan menghuraikan rentetan. Untuk menetapkan semula aliran rentetan, pembangun menggunakan kaedah str() untuk mengosongkan rentetan asas. Walau bagaimanapun, pendekatan ini mungkin tidak menetapkan semula strim sepenuhnya.

Kajian Kes

Pertimbangkan coretan kod berikut:

<code class="cpp">stringstream parser;

parser << 5;
short top = 0;
parser >> top;
parser.str(""); // Attempting to reset parser

parser << 6; // Fails to insert 6 into parser
short bottom = 0;
parser >> bottom;</code>

Niatnya ialah untuk menetapkan semula aliran penghurai dan menetapkan nilai baharu kepadanya. Walau bagaimanapun, kod secara tidak dijangka gagal memasukkan 6 ke dalam penghurai.

Memahami Ralat

Punca masalah terletak pada tetapan semula yang tidak lengkap. Kaedah str() hanya mengosongkan rentetan asas, manakala bendera ralat (seperti eof dan fail) kekal ditetapkan. Operasi seterusnya, seperti membaca daripada strim, akan gagal disebabkan oleh bendera ini.

Teknik Tetapan Semula yang Betul

Untuk menetapkan semula aliran rentetan dengan berkesan, adalah penting untuk bukan sahaja mengosongkan rentetan tetapi juga menetapkan semula bendera ralat. Ini boleh dicapai menggunakan kaedah clear():

<code class="cpp">parser.str( std::string() );
parser.clear();</code>

Dengan memanggil kedua-dua str() dan clear(), rentetan itu ditetapkan semula kepada rentetan kosong dan sebarang bendera ralat dikosongkan, memastikan yang berikutnya operasi akan berjaya.

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Semula Stringstream dengan Berkesan dalam C?. 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