各語言印出A到Z的方式 – C#, Java, Python3, JS

前言

這一篇文章其實想寫了很久

最早是在解決 LeetCode#387 的問題時遇到,英文版文章在2022年8月寫完,中文版的翻譯則隔了快一年 – 2023年的7月

解決方法

最簡單可以達成這件事就是要用到 ASCII code

有關ASCII code,這邊簡單介紹一下,他其實就是種編碼原則,是由電報發展而來

主要可顯示的範圍為英文字母、數字以及一些特殊字元

最早研發編碼就是為了通用,但畢竟是基於拉丁字母為主體研發的

後期又為了補足其不足,推出了Unicode,又被稱為萬國碼 (ASCII code也包含在裡面)

萬國碼為每一個字元而非字形定義唯一的代碼(即一個整數)

兩者的差異除了範圍外,還有編碼的方式

ASCII code用的是7位元,也就是可以儲存 2的7次方的,也就是能儲存128個字元

至於Unicode則是使用16進位來做儲存

較為詳細可以看wiki (都有列出十進位會顯示的數字)

繞了一大圈,現在回到正題

因為各程式語言在處理文字時,都是使用Unicode來處理,然後我們知道是以16進位儲存的

要是你在學計算機概論時沒有偷懶,應該可以知道16進位是可以輕鬆地轉換為10進位的

舉例來說,我們來看看「我」這個單字 (這邊用C#來舉例)

根據網路上的資料 – “我” U+6211 CJK Unified Ideograph-6211 Unicode Character (compart.com)

「我」這個單位為 U+6211,也就是10進位的 25105

char a = '我'
Console.Write((int)a);
Console.WriteLine((char)25105); //當然也可以轉換回來

這個範例也可以證實這一點

然後這時候我們看向不管是Unicode或是ASCII code

應該可以發現A到Z的十進位是連續的數字吧

故結合上面的數值特性,就可以使用一個簡單的迴圈來跑出結果了~

C#

for (char c = 'a'; c <= 'z'; c++)
{
	Console.WriteLine(c);
}

也就是這樣,就可以將全部小寫印出來了

需要注意的是,小寫與大寫並沒有連續

大寫 A到Z的十進位是 65到90

小寫 a到z的十進位則是 97到122

可以從10進位輕鬆地看出沒有連續這一點 (中間截掉了一部分,有興趣的可以自己去看看)

所以如果要從小寫a到大寫Z的話,要寫成

for (char c = 'a'; c <= 'z'; c++)
{
	Console.WriteLine(c);
}
for (char c = 'A'; c <= 'Z'; c++)
{
	Console.WriteLine(c);
}

*以下的語言,就只以小寫a到z為例 (若有疑問,還請參閱C#的說明)

Java

for (char c = 'a'; c <= 'z'; c++)
{
	//System.out.println((int)c);
	System.out.println(c);
}

Python3

for c in range(ord('a'), ord('z') + 1):
	#print(c)    #會顯示unicode的十進位
	print(chr(c))

Python就有點不一樣了,沒辦法直接對char迴圈

這時候要用到 ord 這個內建函式,返回的會是這個char對應的十進位編碼

這時候再用到 range 去跑迴圈

另外將十進位轉換回 char類型

(另外,如果想直接用數字來表示也可以,但通常來說誰記得啊哈哈)

for c in range(97, 122 + 1):
	#print(c)    #會顯示unicode的十進位
	print(chr(c))

JavaScript

for (let c = 'A'.charCodeAt(0); c <= 'Z'.charCodeAt(0); c++) {
	//console.log(c); //顯示10進位的數值
	console.log(String.fromCharCode(c))
}

與Python 類似,迴圈還是要用數字去驅動


結論

做了個筆記,這樣就不用每次都找出那一題了哈哈~

這次介紹的是筆者平常比較常用到的4種語言

假如還需要一些其他的語言或是哪裡需要補充,還麻煩再留言通知一聲 !!

希望文章有幫上一點忙,畢竟對專案來說沒有最好的做法,只有最合適的做法

✅如有任何疑問,歡迎透過留言或messenger讓我知道 !

其他筆記們

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *