Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menukar Rentetan kepada Integer dengan Pengendalian Ralat dalam C?
Dalam pengaturcaraan, selalunya perlu untuk menukar rentetan kepada integer. Walaupun C menyediakan fungsi std::atoi untuk tujuan ini, ia tidak mengendalikan ralat penukaran dengan baik. Untuk menangani perkara ini, kami mencari penyelesaian yang membolehkan pengendalian ralat, serupa dengan Int32.TryParse C#.
Pendekatan yang cekap ialah menggunakan fungsi lexical_cast daripada perpustakaan Boost . Ia menyokong pelbagai jenis data dan boleh membuang pengecualian jika pelakon gagal. Berikut ialah contoh:
<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 error } }</code>
Jika Boost tidak tersedia, gabungan std::stringstream dan >> operator boleh digunakan:
<code class="cpp">#include <iostream> #include <sstream> #include <string> int main() { std::string s; std::cin >> s; try { std::stringstream ss(s); int i; if ((ss >> i).fail() || !(ss >> std::ws).eof()) { throw std::bad_cast(); } // ... } catch (...) { // Handle error } }</code>
Sebagai alternatif terakhir, versi "palsu" fungsi lexical_cast Boost boleh dibuat:
<code class="cpp">#include <iostream> #include <sstream> #include <string> 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; } int main() { std::string s; std::cin >> s; try { int i = lexical_cast<int>(s); // ... } catch (...) { // Handle error } }</code>
Jika versi tanpa buang dikehendaki, tangkap pengecualian yang sesuai dan kembalikan boolean yang menunjukkan kejayaan atau 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; } } int main() { std::string s; std::cin >> s; int i; if (!lexical_cast(s, i)) { std::cout << "Bad cast." << std::endl; } }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menukar Rentetan kepada Integer dengan Pengendalian Ralat dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!