Bagaimanakah Saya Boleh Menukar Rentetan kepada Integer dalam C Semasa Mengendalikan Ralat Penukaran?

Barbara Streisand
Lepaskan: 2024-11-04 22:49:02
asal
956 orang telah melayarinya

How Can I Convert Strings to Integers in C   While Handling Conversion Errors?

Menukar Rentetan kepada Integer dengan Kegagalan Boolean dalam C

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

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

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!