Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menukar Rentetan kepada Beregu dalam C dan Mengendalikan Rentetan Bukan Berangka dengan Selamat?

Bagaimana untuk Menukar Rentetan kepada Beregu dalam C dan Mengendalikan Rentetan Bukan Berangka dengan Selamat?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 07:28:301004semak imbas

How to Safely Convert Strings to Doubles in C   and Handle Non-Numerical Strings?

Menukar Rentetan kepada Beregu dalam C dengan Pengendalian Khas untuk Rentetan Bukan Berangka

Dalam C , menukar rentetan kepada beregu boleh dilakukan dengan lancar menggunakan fungsi terbina dalam. Walau bagaimanapun, menjadi penting untuk membezakan antara rentetan berangka dan bukan berangka. Untuk menangani cabaran ini, kami membentangkan penyelesaian yang mengembalikan 0 untuk rentetan bukan berangka.

Pelaksanaan Fungsi:

Inti penyelesaian kami terletak pada fungsi string_to_double:

<code class="cpp">#include <sstream>

double string_to_double(const std::string& s) {
  std::istringstream i(s);
  double x;
  if (!(i >> x))
    return 0;
  return x;
}</code>

Cara Ia Berfungsi:

  1. Kami mencipta strim rentetan input (std::istringstream) objek i untuk membaca rentetan dengan selamat.
  2. Kami cuba mengeluarkan dua kali ganda daripada strim. Jika berjaya, rangkap dua ditetapkan kepada x.
  3. Jika tiada rangkap dua boleh diekstrak (i ​​>> x gagal), kita kembalikan 0, menunjukkan rentetan bukan berangka.

Menguji Fungsi:

Dalam kes ujian yang disediakan, kami menunjukkan cara fungsi mentafsir rentetan angka dan bukan angka yang berbeza dengan betul:

<code class="cpp">int main() {
  assert(0.5 == string_to_double("0.5"));
  assert(0.5 == string_to_double("0.5 "));
  assert(0.5 == string_to_double(" 0.5"));
  assert(0.5 == string_to_double("0.5a"));

  // Non-numerical strings will return 0:
  assert(0 == string_to_double("foobar"));
}</code>

Keterbatasan:

Adalah penting untuk ambil perhatian bahawa disebabkan oleh keperluan khusus untuk mengembalikan 0 untuk rentetan bukan berangka, membezakan antara rentetan berangka yang mewakili rentetan sifar dan rentetan yang benar-benar bukan berangka adalah tidak mungkin.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Rentetan kepada Beregu dalam C dan Mengendalikan Rentetan Bukan Berangka dengan Selamat?. 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