Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah saya boleh mengendalikan ralat penukaran apabila menukar rentetan kepada integer dalam C ?
Tukar String kepada int dengan Pengendalian Ralat dalam C
Menukar rentetan kepada integer ialah tugas biasa dalam pengaturcaraan. Walau bagaimanapun, mungkin terdapat keadaan di mana nilai rentetan tidak berjaya ditukar kepada integer. Dalam senario sedemikian, adalah penting untuk mengendalikan kegagalan penukaran dengan anggun.
boost::lexical_cast
Salah satu kaedah paling mudah untuk menukar rentetan kepada int dengan ralat pengendalian adalah dengan menggunakan fungsi boost::lexical_cast. Fungsi ini memberikan pengecualian jika penukaran tidak dapat diteruskan, membolehkan kami menangkapnya dan bertindak balas dengan sewajarnya.
<code class="cpp">#include <boost/lexical_cast.hpp> int main() { std::string s; std::cin >> s; try { int i = boost::lexical_cast<int>(s); } catch (...) { // Handle the conversion failure } }</code>
Menggunakan Fungsi Perpustakaan Standard
Pendekatan alternatif tanpa menggunakan boost adalah untuk menggunakan fungsi perpustakaan standard seperti std::stringstream dan std::bad_cast.
<code class="cpp">#include <iostream> #include <sstream> int main() { std::string s; std::cin >> s; std::stringstream ss(s); int i; if ((ss >> i).fail() || !(ss >> std::ws).eof()) { throw std::bad_cast(); } }</code>
Fungsi Tersuai
Untuk kebolehubahsuaian, anda boleh mencipta fungsi yang meniru kefungsian boost::lexical_cast dan menguruskan kegagalan penukaran.
<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 Lontar
Jika anda lebih suka mengelak daripada melontar pengecualian, anda boleh mencipta versi tanpa lontaran fungsi di atas dengan menangkap pengecualian dan mengembalikan penunjuk kegagalan.
<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>
Menggunakan kaedah ini, anda boleh menukar rentetan kepada integer dengan cekap sambil mengendalikan kemungkinan kegagalan penukaran.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengendalikan ralat penukaran apabila menukar rentetan kepada integer dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!