Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengendalikan ralat penukaran apabila menukar rentetan kepada integer dalam C ?

Bagaimanakah saya boleh mengendalikan ralat penukaran apabila menukar rentetan kepada integer dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 20:21:01802semak imbas

How can I handle conversion errors when converting a string to an integer in 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!

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