2017-02-15 192 views

回答

9

如果您的角色正在使用ASCII字符集,您可以與值32異或以在大寫和小寫之間翻轉。

char switchCase(char letter) 
{ 
    return letter^32; 
} 
+0

在ASCII中的確可以,而且是一個聰明的做法。 (如果你提到這個限制,我認爲這會得到很多upvotes。) – Bathsheba

+0

這隻適用於如果輸入是字母字符,但不是標點符號,數字等。但如果確實如此,那麼它很好。 – mars

+2

A(41):0100,0001 vs a(61):0110,0001。所以位5(32)是開關。 ASCII很漂亮。 –

4

您可能會發現很難擊敗::tolower,因爲它將會針對您的平臺進行高度優化。

但是,如果你想自己handcode,然後保持大小256(一個基於unsigned char左右)的陣列arr這樣

arr[n]n小寫形式。

這就是沒有分支的O(1),並且如果您使用'a','b',來設置陣列,它將是便攜式的。

+1

事實上,基於分支和數組的操作都是O(1),儘管取決於編譯器優化,放置代碼(循環?)和緩存狀態,陣列解決方案可能由於緩存故障而稍慢,而分支可以被優化,例如使用分支預測。正如通常所建議的那樣,測試所有解決方案並對它們進行分析以查看哪一個最適合您。 – cbuchart

+2

@cbuchart:絕對!這就是爲什麼我的第一句話可能會贏得它。 – Bathsheba

相關問題