Fungsi strtoll () 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 "201xz $" Bagian numerik yang valid -> 201 Karakter pertama setelah bagian numerik yang valid -> x
strtoll () prototipe (Pada standar C ++ 11)
panjang int strtoll (const char * str, char ** end, int base);
Fungsi strtoll () 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 dan panjang.
Fungsi ini didefinisikan dalam file header.
Parameter strtoll ()
- str: String yang merepresentasikan bilangan integral.
- end: Referensi ke objek yang sudah dialokasikan dengan tipe char *. Nilai akhir ditetapkan oleh fungsi ke karakter berikutnya dalam str setelah karakter valid terakhir. Parameter ini juga dapat berupa penunjuk nol, dalam hal ini tidak digunakan.
- base: Basis dari nilai integral. Himpunan nilai yang valid untuk basis adalah (0, 2, 3,…, 35, 36).
strtoll () Nilai kembali
Fungsi strtoll () mengembalikan:
- nilai int panjang yang panjang (yang diubah dari string).
- 0 jika tidak ada konversi valid yang dapat dilakukan.
Contoh 1: Bagaimana fungsi strtoll () bekerja?
#include #include #include using namespace std; int main() ( int base = 10; char numberString() = "13.5ab_1x"; char *end; long long int number; number = strtoll(numberString, &end, base); cout << "String value = " << numberString << endl; cout << "Long long int value = " << number << endl; cout << "End String = " << end << endl; strcpy(numberString, "13"); cout << "String value = " << numberString << endl; number = strtoll(numberString, &end, base); cout << "Long long int value = " << number << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; )
Saat Anda menjalankan program, hasilnya adalah:
Nilai string = 13.5ab_1x Nilai int panjang panjang = 13 String Akhir = .5ab_1x Nilai string = 13 Nilai int panjang panjang = 13 Pointer nol
Nilai integer yang valid untuk fungsi strtoll () 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.
Contoh 2: fungsi strtoll () dengan basis yang berbeda
#include #include using namespace std; int main() ( char *end; cout << "23ajz" << " to Long Long Int with base-7 = " << strtoll("23ajz", &end, 7) << endl; cout << "End String = " << end << endl << endl; cout << "23ajz" << " to Long Long Int with base-20 = " << strtoll("23ajz", &end, 20) << endl; cout << "End String = " << end << endl << endl; cout << "23ajz" << " to Long Long Int with base-36 = " << strtoll("23ajz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )
Saat Anda menjalankan program, hasilnya adalah:
23ajz ke Long Long Int dengan base-7 = 17 End String = ajz 23ajz to Long Long Int dengan base-20 = 17419 End String = z 23ajz to Long Long Int dengan base-36 = 3512879 End String =
Fungsi strtoll () mengabaikan semua karakter spasi putih sebelum karakter non-spasi putih utama ditemukan.
Secara umum, argumen integer yang valid untuk fungsi strtoll () memiliki bentuk berikut:
(spasi) (- | +) (0 | 0x) (karakter alfanumerik)
Kemudian, mulai dari karakter ini, dibutuhkan sebanyak mungkin karakter yang membentuk representasi integer yang valid dan mengubahnya menjadi nilai int yang panjang dan panjang. Apa pun yang tersisa dari string setelah karakter valid terakhir diabaikan dan tidak berpengaruh pada hasil.
Contoh 3: fungsi strtoll () untuk memimpin spasi dan konversi tidak valid
#include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Long Long Int with base-11 = " << strtoll(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; cout << " 110bcd" << " to Long Long Int with base-2 = " << strtoll(" 110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Long Long Int with base-10 = " << strtoll("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )
Saat Anda menjalankan program, hasilnya adalah:
25axbz ke Long Long Int dengan base-11 = 307 End String = xbz 110bcd to Long Long Int dengan base-2 = 6 End String = bcd ax110.97 to Long 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 strtoll () dengan basis 0
#include #include using namespace std; int main() ( char *end; /* octal base */ cout << "025x" << " to Long Long Int with base-0 = " << strtoll("025x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0xf1x" << " to Long Long Int with base-0 = " << strtoll("0xf1x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "15ab" << " to Long Long Int with base-0 = " << strtoll("15ab", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )
Saat Anda menjalankan program, hasilnya adalah:
025x ke Long Long Int dengan base-0 = 21 End String = x 0xf1x ke Long Long Int dengan base-0 = 241 End String = x 15ab ke Long Long Int dengan base-0 = 15 End String = ab