Rumah > hujung hadapan web > tutorial js > Mengira dengan set watak sewenang -wenang

Mengira dengan set watak sewenang -wenang

Christopher Nolan
Lepaskan: 2025-03-04 01:11:08
asal
519 orang telah melayarinya

Counting with an Arbitrary Character Set

mata teras

    Menggunakan set aksara sewenang -wenang di JavaScript memerlukan membuat perbendaharaan kata, iaitu kamus watak yang ditakrifkan sebagai rentetan urutan melarikan diri Unicode. Setiap watak dalam set aksara diberikan nilai yang unik, dan proses pengiraan melintasi seluruh set aksara dan angin kembali ke permulaan apabila ia mencapai akhir.
  • Dalam JavaScript, fungsi terbina dalam yang menghuraikan dan menukar nombor antara kardinaliti berangka yang berbeza dapat diperluaskan untuk menangani set karakter sewenang-wenangnya. Ini membolehkan pengiraan dalam kardinaliti bukan decimal dan menukarkan nombor perpuluhan kembali ke rentetan angka bukan decimal, walaupun dengan watak-watak yang tidak biasa seperti huruf Yunani atau cyrillic, hieroglif, atau runes.
  • Konsep menggunakan pengiraan set aksara sewenang -wenang mempunyai pelbagai aplikasi, terutamanya dalam bidang sains komputer dan kriptografi. Ia membolehkan sejumlah besar kombinasi yang mungkin, menjadikannya sesuai untuk membuat pengenal unik, kunci penyulitan, dan kata laluan yang selamat. Semakin besar set aksara, semakin lama rentetan, semakin banyak kombinasi yang berpotensi ada, dan semakin banyak keselamatan.
Artikel ini akan memperkenalkan teknik pengiraan set aksara yang mudah dan fleksibel. Walaupun teknik ini tidak sering diperlukan, apabila diperlukan, anda akan mendapati bahawa fungsi terbina dalam JavaScript tidak dapat mengendalikannya sepenuhnya. JavaScript mempunyai fungsi terbina dalam untuk parsing dan menukarkan nombor antara kardinaliti berangka yang berbeza. Sebagai contoh, kaedah

boleh mengendalikan sebarang kardinaliti (kardinaliti berangka) dari 2 hingga 36, ​​dan biasanya digunakan untuk penukaran angka dan pengiraan kardinaliti bukan decimal. parseInt kaedah boleh membalikkan penukaran, menukar nombor perpuluhan kembali ke rentetan angka bukan decimal: Number.toString

var character = "2F";
alert(parseInt(character, 16));    // 弹出 47

var number = 47;
alert(number.toString(16));        // 弹出 "2F"
Salin selepas log masuk
Salin selepas log masuk
Tetapi bagaimana jika anda mahu mengira menggunakan nombor Klingon? Atau lebih mungkin, gunakan huruf Yunani atau cyrillic, hieroglif, atau sejenis rune? Teknik yang saya akan tunjukkan boleh melakukan ini dengan ketepatan, dalam mana -mana kardinaliti berangka;

Glosari adalah penting

Pertama, kita perlu menentukan perbendaharaan kata, kamus watak -watak yang akan kita gunakan, ditakrifkan sebagai satu rentetan urutan Unicode Escape. Dalam kes ini, kita mempunyai 16 huruf Yunani modal, dari alpha hingga pi - setiap nombor diwakili oleh huruf, dan panjang keseluruhan rentetan menentukan asas berangka:

var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";
Salin selepas log masuk
Salin selepas log masuk

urutan melarikan diri adalah watak

Perlu diingat bahawa walaupun ia memerlukan enam watak menaip untuk menentukan urutan Unicode Escape, ia masih muncul sebagai hanya satu watak dalam rentetan, jadi panjang perbendaharaan kata adalah 16 aksara. Sebaik sahaja kita mempunyai perbendaharaan kata, kita boleh menggunakan

untuk memetik aksara dengan indeks nombor, dan sebaliknya, kita boleh menggunakan String.charAt untuk mendapatkan indeks angka aksara: String.indexOf

var character = "2F";
alert(parseInt(character, 16));    // 弹出 47

var number = 47;
alert(number.toString(16));        // 弹出 "2F"
Salin selepas log masuk
Salin selepas log masuk
Oleh itu, apa -apa pengiraan yang kami lakukan akan berdasarkan kedua -dua kaedah. Sebagai contoh, mari kita tentukan gelung, jalankan "κ" lelaran, dan senaraikan setiap watak di antara:

var lexicon = "u0391u0392u0393u0394u0395u0396u0397u0398u0399u039au039bu039cu039du039eu039fu03a0";
Salin selepas log masuk
Salin selepas log masuk
Tetapi bagaimana dengan nombor yang lebih besar, seperti kesamaan watak yang menunjukkan 23? Kami hanya perlu mengekstrak nombor individu dan kemudian mendapatkan bersamaan dengan watak, dalam kes ini 2 dan 3:

var number = lexicon.indexOf("u0398");    // "Θ" 的十进制等价物

var character = lexicon.charAt(7);         // 7 的字符等价物
Salin selepas log masuk
Untuk membuat sesuatu yang lebih menarik, bagaimana jika nombor yang kita kubah mengandungi huruf dan nombor, seperti nombor heksadesimal "2F"? Dalam kes ini kita perlu menukar setiap nombor secara berasingan kerana kita tidak boleh merujuk kepada aksara dengan indeks heksadesimal (iaitu

mesti menjadi lexicon.charAt("F")): lexicon.charAt(15)

var str = "";
for(var i=0; i<lexicon.indexOf("u039a"); i++) {
    str += lexicon.charAt(i);
}
alert(str);
Salin selepas log masuk
Sudah tentu, dua contoh terakhir adalah agak mudah, kerana bilangan digit nombor diketahui; Semua komponen yang anda perlukan disediakan di sini, hanya menyesuaikannya dengan keperluan khusus anda.

Data adalah penting!

Ia berlaku bahawa anda boleh mengira menggunakan nombor dan huruf Latin biasa dengan cara yang sama jika anda mahu. Skala glosari bermakna anda boleh menggunakannya untuk memperluaskan keupayaan asli JavaScript ke kardinaliti yang lebih besar daripada 36 dan menggunakan sebarang simbol yang kelihatan sesuai pada masa itu.

atau hanya mengembangkan beberapa jam yang bergaya!

Ingin tahu lebih lanjut?

Jika anda ingin membaca lebih lanjut dari James, langgan Teknologi Teknologi Teknologi Tech Mingguan kami.

FAQs mengenai mana -mana set aksara (FAQ)

(bahagian FAQ yang disediakan dalam teks asal hendaklah disertakan di sini, dan disebabkan oleh alasan panjang, ia ditinggalkan di sini)

Atas ialah kandungan terperinci Mengira dengan set watak sewenang -wenang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan