C ++ strtol () - Perpustakaan Standard C ++

Fungsi strtol () dalam C ++ menafsirkan isi rentetan sebagai bilangan integral dari pangkalan yang ditentukan dan mengembalikan nilainya sebagai int panjang.

Fungsi strtol () dalam C ++ menafsirkan isi rentetan sebagai bilangan integral dari pangkalan yang ditentukan dan mengembalikan nilainya sebagai int panjang. Fungsi ini juga menetapkan penunjuk untuk menunjuk ke watak pertama setelah aksara rentetan terakhir yang sah jika ada, jika tidak, penunjuk diatur ke nol.

 Untuk asas 10 dan rentetan "12abc": Bahagian angka yang sah -> 12 Aksara pertama selepas bahagian angka yang sah -> a

prototaip strtol () (Seperti standard C ++ 11)

 panjang int strtol (const char * str, char ** end, int base);

Fungsi strtol () mengambil rentetan, penunjuk ke watak dan nilai integer - asas sebagai parameternya, menafsirkan kandungan rentetan sebagai bilangan integral dari pangkalan yang diberikan dan mengembalikan nilai int yang panjang.

Fungsi ini ditentukan dalam fail header.

strtol () Parameter

  • str: Rentetan yang mempunyai perwakilan nombor integral.
  • end:Rujukan ke objek jenis char * yang sudah diperuntukkan. Nilai akhir ditetapkan oleh fungsi ke watak seterusnya dalam str selepas watak terakhir yang sah. Parameter ini juga dapat menjadi penunjuk nol, dalam hal ini tidak digunakan.
  • base:Asas nilai kamiran. Kumpulan nilai yang sah untuk asas adalah (0, 2, 3,…, 35, 36).

strtol () Nilai pulangan

Fungsi strtol () mengembalikan:

  • nilai int panjang (yang ditukar dari rentetan).
  • 0 jika tiada penukaran yang sah dapat dilakukan.

Contoh 1: Bagaimana strtol () berfungsi dalam C ++?

 #include #include using namespace std; int main() ( int base = 10; char str() = "27ab_1x"; char *end; long int num; num = strtol(str, &end, base); cout << "Number in String = " << str << endl; cout << "Number in Long Int = " << num << endl; cout << "End String = " << end << endl << endl; // the pointer to invalid characters can be null strcpy(str, "27"); cout << "Number in String = " << str << endl; num = strtol(str, &end, base); cout << "Number in Long Int = " << num << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; ) 

Semasa anda menjalankan program, outputnya adalah:

 Nombor dalam String = 27ab_1x Nombor di Long Int = 27 String Akhir = ab_1x Nombor di String = 27 Nombor di Long Int = 27 Null pointer

Nilai integer yang sah untuk fungsi strtol () terdiri daripada:

  • Tanda + atau - pilihan.
  • Awalan 0 untuk asas oktal (hanya berlaku apabila asas = 8 atau 0).
  • Awalan 0x atau 0X untuk asas heksadesimal (hanya berlaku apabila asas = 16 atau 0).
  • Urutan digit dan / atau huruf (jika asasnya lebih besar daripada 10).

Nilai yang sah untuk asas parameter adalah (0, 2, 3,…, 35, 36). Satu set digit yang sah untuk asas 2 adalah (0, 1), untuk asas 3 adalah (0, 1, 2) dan seterusnya. Untuk asas bermula dari 11 hingga 36, ​​digit yang sah termasuk huruf. Kumpulan digit yang sah untuk asas 11 adalah (0, 1,…, 9, A, a), untuk asas 12 ialah (0, 1,…, 9, A, a, B, b) dan sebagainya.

Catatan: Penting untuk diingat bahawa watak yang sah untuk satu pangkalan boleh berakhir dalam rentetan yang tidak sah untuk pangkalan lain seperti dalam contoh di bawah.

Contoh 2: fungsi strtol () dengan asas yang berbeza

 #include #include #include using namespace std; int main() ( char *end; cout << "128bz" << " to Long Int with base-5 = " << strtol("128bxz", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-12 = " << strtol("128bxz", &end, 12) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-36 = " << strtol("128bxz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )

Semasa anda menjalankan program, outputnya adalah:

 128bz ke Long Int dengan asas-5 = 7 End String = 8bxz 128bz ke Long Int dengan base-12 = 2123 End String = xz 128bz ke Long Int dengan asas-36 = 64214135 End String = 

Fungsi strtol () mengabaikan semua watak ruang kosong sehingga watak bukan ruang kosong utama dijumpai.

Secara umum, argumen integer yang sah untuk fungsi strtol () mempunyai bentuk berikut:

 (ruang kosong) (- | +) (0 | 0x) (aksara alfanumerik)

Kemudian, bermula dari watak ini, diperlukan sebanyak mungkin watak yang membentuk perwakilan bilangan bulat yang sah dan mengubahnya menjadi nilai int yang panjang. Apa sahaja yang tersisa dari rentetan setelah watak yang terakhir terakhir diabaikan dan tidak memberi kesan pada hasilnya.

Contoh 3: fungsi strtol () untuk ruang kosong utama dan penukaran tidak sah

 #include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Long Int with base-11 = " << strtol(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; cout << " 110bcd" << " to Long Int with base-2 = " << strtol(" 110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Long Int with base-10 = " << strtol("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )

Semasa anda menjalankan program, outputnya adalah:

 25axbz ke Long Int dengan base-11 = 307 End String = xbz 110bcd ke Long Int dengan base-2 = 6 End String = bcd ax110.97 to Long Int dengan base-10 = 0 End String = ax110.97 

Sekiranya asasnya 0, asas angka ditentukan secara automatik dengan melihat format rentetan. Sekiranya awalan adalah 0, asasnya adalah oktal (8). Sekiranya awalan adalah 0x atau 0X, asasnya adalah heksadesimal (16), jika tidak, asasnya adalah perpuluhan (10).

Contoh 4: fungsi strtol () dengan asas 0

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "0128ai" << " to Long Int with base-0 = " << strtol("0128ai", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x15axzz" << " to Long Int with base-0 = " << strtol("0x15axzz", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "23dfl" << " to Long Int with base-0 = " << strtol("23dfl", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

Semasa anda menjalankan program, outputnya adalah:

0128ai ke Long Int dengan asas-0 = 10 End String = 8ai 0x15axzz to Long Int dengan base-0 = 346 End String = xzz 23dfl ke Long Int dengan base-0 = 23 End String = dfl 

Artikel menarik...