2010-11-01 67 views
4

我需要用C編寫一個Caeser密碼,所以我正在一步一步地明白了一切我做的:')C:將所有特殊字符等效(E => E)

我需要照顧特殊字符 例如:如果用戶輸入

「這是一個déjàvù!」 將它轉換爲 「這是一個似曾相識」

是否有一個C函數能夠這樣做,而不是做手工爲ASCII碼的每個特殊字符的?

這正是我試圖避免的情況:

case -85 : 
case -86 : 
case -87 : 
case -88 : 
*p = 'e'; 
+1

你想要人轉換爲什麼? – 2010-11-01 20:03:38

回答

5

是否有一個C函數能夠這樣做,而不是做手工爲ASCII碼的每個特殊字符的?

Iconv將做你想做的,當你選擇ASCII//TRANSLIT作爲目標編碼。

+0

哦,謝謝我不知道它是C中的一個函數:O http://www.opengroup.org/onlinepubs/009695399/functions/iconv.html – 2010-11-01 18:01:00

+0

btw,如果你在C中有一個簡單的例子,因爲每個例如,我發現有40行C語言初學者無法理解的代碼。謝謝:) – 2010-11-01 18:10:25

+2

@Tristan:從快速瀏覽文檔,我相信短版本是'cd = iconv_open(tocode,fromcode);'(可能代碼爲UTF-8和ASCII在你的情況下),其次是'iconv (cd,inbuf,inbufsize,outbuf,outbufsize);'(緩衝區和大小應該是你輸入的拷貝地址,因爲它們被iconv改變),然後檢查錯誤,最後是'iconv_close(cd);' 。 'cd'可以多次重複使用。你可以在啓動時打開它並在關機時關閉。 – Cascabel 2010-11-01 18:44:19

2

問題是'等價'取決於你的文化。
ü(u變音符)是否等於u或'oe'?

+0

這相當於「我」:')。你有沒有在C btw中使用iconv的例子?謝謝:) – 2010-11-01 18:11:37

+0

對不起沒有聽說iconv之前 - 只是說它不是一個標準功能的原因是,除非你知道什麼語言/區域設置,否則沒有辦法做到這一點。 – 2010-11-01 18:25:25

相關問題