C ++ strtol () - C ++ Standard Library

Fungsi strtol () di C ++ menafsirkan konten string sebagai bilangan integral dari basis yang ditentukan dan mengembalikan nilainya sebagai int panjang.

Fungsi strtol () di C ++ menafsirkan konten string sebagai bilangan integral dari basis yang ditentukan dan mengembalikan nilainya sebagai int panjang. Fungsi ini juga menyetel penunjuk untuk menunjuk ke karakter pertama setelah karakter terakhir yang valid dari string jika ada, jika tidak penunjuk disetel ke nol.

 Untuk basis 10 dan string "12abc": Bagian numerik yang valid -> 12 Karakter pertama setelah bagian numerik yang valid -> a

strtol () prototipe (Pada standar C ++ 11)

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

Fungsi strtol () mengambil string, pointer ke karakter dan nilai integer - basis sebagai parameternya, menafsirkan konten string sebagai bilangan integral dari basis yang diberikan dan mengembalikan nilai int yang panjang.

Fungsi ini didefinisikan dalam file header.

Parameter strtol ()

  • str: String yang merepresentasikan bilangan integral.
  • end:Referensi ke objek jenis char * yang telah dialokasikan. Nilai akhir ditetapkan oleh fungsi ke karakter berikutnya dalam str setelah karakter valid terakhir. Parameter ini juga bisa menjadi penunjuk nol, dalam hal ini tidak digunakan.
  • base:Basis dari nilai integral. Himpunan nilai yang valid untuk basis adalah (0, 2, 3,…, 35, 36).

strtol () Nilai kembali

Fungsi strtol () mengembalikan:

  • nilai int panjang (yang diubah dari string).
  • 0 jika tidak ada konversi valid yang dapat dilakukan.

Contoh 1: Bagaimana strtol () bekerja di 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; ) 

Saat Anda menjalankan program, hasilnya adalah:

 Angka dalam String = 27ab_1x Angka dalam Panjang Int = 27 String Akhir = ab_1x Angka dalam String = 27 Angka dalam Panjang Int = 27 Pointer nol

Nilai integer yang valid untuk fungsi strtol () terdiri dari:

  • Tanda + atau - opsional.
  • Awalan 0 untuk basis oktal (berlaku hanya jika basis = 8 atau 0).
  • Awalan 0x atau 0X untuk basis heksadesimal (hanya berlaku jika basis = 16 atau 0).
  • Urutan angka dan / atau huruf (jika basis lebih besar dari 10).

Nilai yang valid untuk parameter base adalah (0, 2, 3,…, 35, 36). Himpunan angka yang valid untuk basis 2 adalah (0, 1), untuk basis 3 adalah (0, 1, 2) dan seterusnya. Untuk basis mulai dari 11 hingga 36, ​​angka yang valid menyertakan huruf. Himpunan digit yang valid untuk basis 11 adalah (0, 1,…, 9, A, a), untuk basis 12 adalah (0, 1,…, 9, A, a, B, b) dan seterusnya.

Catatan: Penting untuk diingat bahwa karakter yang valid untuk satu basis dapat berakhir di string yang tidak valid untuk basis lain seperti pada contoh di bawah ini.

Contoh 2: fungsi strtol () dengan basis yang berbeda

 #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; )

Saat Anda menjalankan program, hasilnya adalah:

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

Fungsi strtol () mengabaikan semua karakter spasi putih sebelum karakter non-spasi putih utama ditemukan.

Secara umum, argumen integer yang valid untuk fungsi strtol () memiliki bentuk berikut:

 (spasi) (- | +) (0 | 0x) (karakter alfanumerik)

Kemudian, dimulai dari karakter ini, dibutuhkan karakter sebanyak mungkin yang membentuk representasi integer yang valid dan mengubahnya menjadi nilai int yang panjang. Apa pun yang tersisa dari string setelah karakter valid terakhir diabaikan dan tidak berpengaruh pada hasil.

Contoh 3: fungsi strtol () untuk memimpin spasi kosong dan konversi tidak valid

 #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; )

Saat Anda menjalankan program, hasilnya 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 ke Long Int dengan base-10 = 0 End String = ax110.97 

Jika basisnya 0, basis numerik ditentukan secara otomatis dengan melihat format string. Jika awalannya 0, maka basisnya adalah oktal (8). Jika awalannya 0x atau 0X, basisnya adalah heksadesimal (16), jika tidak basisnya adalah desimal (10).

Contoh 4: Fungsi strtol () dengan basis 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; )

Saat Anda menjalankan program, hasilnya adalah:

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

Artikel yang menarik...