Cara Mengenalpasti Nombor Dalam Rentetan Menggunakan C
Mengekodkan fungsi yang mampu mengesahkan sama ada rentetan mewakili nilai angka dalam C boleh menimbulkan cabaran yang ketara. Artikel ini menangani isu ini dan membentangkan penyelesaian yang cekap.
Percubaan Asal
Pada mulanya, fungsi bernama isParam telah dibangunkan dengan tujuan untuk memastikan sama ada baris dalam teks fail membentuk nilai angka. Fungsi ini menggunakan fungsi isdigit dan atoi, walaupun ia mengalami ralat yang tidak dijangka.
Pendekatan Alternatif
Sebaliknya daripada fungsi asal, kaedah yang berbeza disyorkan. Pendekatan ini melibatkan melintasi rentetan sehingga aksara bukan angka ditemui. Jika mana-mana aksara sedemikian dikenal pasti, rentetan itu dianggap bukan angka. Berikut ialah kodnya:
bool is_number(const std::string& s) { std::string::const_iterator it = s.begin(); while (it != s.end() && std::isdigit(*it)) ++it; return !s.empty() && it == s.end(); }
Sebagai alternatif, sintaks C 11 boleh dimanfaatkan untuk mencapai hasil yang sama:
bool is_number(const std::string& s) { return !s.empty() && std::find_if(s.begin(), s.end(), [](unsigned char c) { return !std::isdigit(c); }) == s.end(); }
Penghadan dan Penambahbaikan
Perlu diingat bahawa penyelesaian yang disediakan hanya mengesahkan integer positif. Untuk senario yang melibatkan integer negatif atau nilai perpuluhan, kaedah berasaskan perpustakaan yang lebih komprehensif adalah dinasihatkan. Memanjangkan kod untuk mengendalikan integer negatif agak mudah, tetapi melaksanakan pengesahan perpuluhan memerlukan pendekatan yang lebih mantap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengenalpasti Nilai Berangka Dengan Cekap Dalam Rentetan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!