Bagaimana cara mendapatkan jumlah karakter dalam string di C ++?
c++
string
stdstring
string-length
Elliot
sumber
sumber
Jawaban:
Jika Anda menggunakan
std::string
, teleponlength()
:Jika Anda menggunakan c-string, panggil
strlen()
.Atau, jika Anda kebetulan suka menggunakan string gaya Pascal (atau string f ***** seperti yang Joel Spolsky suka menyebutnya ketika mereka memiliki NULL di belakang), cukup dereferensi karakter pertama.
sumber
std::size_t
.Saat berurusan dengan string C ++ (std :: string), Anda mencari length () atau size () . Keduanya harus memberi Anda nilai yang sama. Namun saat berhadapan dengan string C-Style, Anda akan menggunakan strlen () .
Keluaran:
sumber
Itu tergantung pada jenis string yang Anda bicarakan. Ada banyak jenis string:
const char*
- string multibyte gaya C.const wchar_t*
- senar lebar model C.std::string
- string multibyte "standar"std::wstring
- string lebar "standar"Untuk 3 dan 4, Anda dapat menggunakan
.size()
atau.length()
metode.Untuk 1, Anda dapat menggunakan
strlen()
, tetapi Anda harus memastikan bahwa variabel string bukan NULL (=== 0)Untuk 2, Anda dapat menggunakan
wcslen()
, tetapi Anda harus memastikan bahwa variabel string bukan NULL (=== 0)Ada jenis string lain di pustaka C ++ non-standar, seperti MFC
CString
, ATLCComBSTR
, ACEACE_CString
, dan seterusnya, dengan metode seperti.GetLength()
, dan seterusnya. Saya tidak dapat mengingat secara spesifik semuanya langsung dari atas kepala saya.The STLSoft perpustakaan telah disarikan ini semua keluar dengan apa yang mereka sebut shims akses tali , yang dapat digunakan untuk mendapatkan panjang string (dan aspek-aspek lain) dari jenis apa pun. Jadi untuk semua hal di atas (termasuk pustaka non-standar) menggunakan fungsi yang sama
stlsoft::c_str_len()
. Artikel ini menjelaskan bagaimana semuanya bekerja, karena tidak semuanya jelas atau mudah.sumber
Untuk Unicode
Beberapa jawaban di sini telah dialamatkan yang
.length()
memberikan hasil yang salah dengan karakter multibyte, namun terdapat 11 jawaban dan tidak ada satupun yang memberikan solusi.Kasus Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚
Pertama-tama, penting untuk mengetahui apa yang Anda maksud dengan "panjang". Untuk contoh yang memotivasi, pertimbangkan string "Z͉̳̺ͥͬ̾a̴͕̲̒̒͌̋ͪl̨͎̰̘͉̟ͤ̀̈̚͜g͕͔̤͖̟̒͝ͅo̵̡̡̼͚̐ͯ̅ͪ̆ͣ̚" (perhatikan bahwa beberapa bahasa, terutama Thai, sebenarnya menggunakan kombinasi tanda diakritik, jadi ini tidak hanya berguna untuk meme berusia 15 tahun, tapi jelas itu kasus penggunaan yang paling penting) . Asumsikan itu dikodekan dalam UTF-8 . Ada 3 cara untuk membicarakan panjang string ini:
95 byte
50 titik kode
5 grafem
Menemukan panjangnya menggunakan ICU
Ada kelas C ++ untuk ICU, tetapi perlu dikonversi ke UTF-16. Anda dapat menggunakan tipe C dan makro secara langsung untuk mendapatkan beberapa dukungan UTF-8:
Ini mencetak:
Boost.Locale membungkus ICU, dan mungkin menyediakan antarmuka yang lebih baik. Namun, masih membutuhkan konversi ke / dari UTF-16.
sumber
Jika Anda menggunakan string gaya-C yang lama dan bukan yang lebih baru, string gaya-STL, ada
strlen
fungsi di pustaka C run time:sumber
jika Anda menggunakan std :: string, ada dua metode umum untuk itu:
jika Anda menggunakan string gaya C (menggunakan char * atau const char *) maka Anda dapat menggunakan:
sumber
.length dan .size adalah sinonim, saya hanya berpikir bahwa "length" adalah kata yang sedikit lebih jelas.
sumber
sumber
untuk objek string yang sebenarnya:
atau
sumber
Dalam C ++ std :: string metode length () dan size () memberi Anda jumlah byte, dan belum tentu jumlah karakter!. Sama dengan fungsi c-Style sizeof ()!
Untuk sebagian besar Karakter 7bit-ASCII yang dapat dicetak nilainya sama, tetapi untuk karakter yang bukan 7bit-ASCII jelas bukan. Lihat contoh berikut untuk memberi Anda hasil nyata (64bit linux).
Tidak ada fungsi c / c ++ sederhana yang benar-benar dapat menghitung jumlah karakter. Omong-omong, semua hal ini bergantung pada implementasi dan mungkin berbeda di lingkungan lain (kompiler, win 16/32, linux, tertanam, ...)
Lihat contoh berikut:
Output dari contoh ini adalah ini:
sumber
Ini mungkin cara termudah untuk memasukkan string dan mencari panjangnya.
sumber
Cara termudah untuk mendapatkan panjang string tanpa repot-repot tentang namespace std adalah sebagai berikut
string dengan / tanpa spasi
string tanpa spasi
sumber