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
Lepaskan: 2024-11-04 20:21:01
asal
809 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan