Masalah:
Menukar rentetan kepada integer dalam C selalunya membentangkan masalah pengendalian penukaran tidak sah. Ini menimbulkan keperluan untuk kaedah yang cekap untuk melakukan penukaran sedemikian dengan keupayaan untuk menunjukkan kegagalan.
Penyelesaian: Lexical Cast Boost
Pustaka lexical_cast Boost menawarkan penyelesaian yang mantap untuk penukaran rentetan-ke-integer yang selamat. Ia memberikan pengecualian apabila menghadapi penukaran yang tidak sah:
<code class="cpp">#include <boost/lexical_cast.hpp> try { int i = boost::lexical_cast<int>(s); // Success handling } catch(...) { // Failure handling }</code>
Alternatif Tanpa Boost: Strim dan Pengecualian Standard
Jika Boost tidak tersedia, anda boleh menggunakan input standard/ operasi aliran keluaran dengan pengecualian:
<code class="cpp">#include <iostream> #include <sstream> #include <string> try { std::stringstream ss(s); int i; if ((ss >> i).fail() || !(ss >> std::ws).eof()) throw std::bad_cast(); // Success handling } catch(...) { // Failure handling }</code>
Faking Boost's Lexical Cast (Pilihan)
Anda boleh mencipta versi tersuai lexical_cast tanpa menggunakan Boost:
<code class="cpp">template <typename T> T lexical_cast(const std::string& s) { std::stringstream ss(s); T result; if ((ss >> result).fail() || !(ss >> std::ws).eof()) throw std::bad_cast(); return result; }</code>
Versi Tanpa Lempar (Pilihan)
Untuk versi tanpa buang, kendalikan pengecualian dalam lexical_cast fungsi:
<code class="cpp">template <typename T> bool lexical_cast(const std::string& s, T& t) { try { t = lexical_cast<T>(s); return true; } catch (const std::bad_cast& e) { return false; } }</code>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Rentetan kepada Integer dalam C Semasa Mengendalikan Ralat Penukaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!