2012-03-14 168 views
4

有一種更有效的方法可以刪除字符串中的重音符號,而不必使用要替換的字符進行大陣列?從字符串中刪除重音C

例如:

removeaccents("áèfoo") 

輸出:

aefoo 
在ASCII表有沒有口音

,我不知道如何做到這一點。提前致謝。 :)

+0

您可以始終使用if梯形圖而不是轉換表。 – 2012-03-14 03:11:10

+9

任何想法什麼編碼的字符串將使用? – loganfsmyth 2012-03-14 03:12:41

+1

可能的幫助問題:http://stackoverflow.com/questions/144761/how-to-remove-accents-and-tilde-in-ac-stdstring – chikuba 2012-03-14 06:09:58

回答

7

聽起來就像你正在尋找unac()。從手冊頁:

unac is a C library that removes accents from characters, regardless of the character set (ISO-8859-15, ISO-CELTIC, KOI8-RU...) as long as iconv(3) is able to convert it into UTF-16 (Unicode).

我找不到下載頁面(我認爲它的意思是here,但鏈接目前404ing)。

sudo apt-get install libunac1-dev 

假設你正在使用gcc,一旦安裝你需要添加-lunac到您的編譯器選項(告訴編譯器與鏈接:如果你在Ubuntu,你可以得到它unac庫)。

+0

非常感謝。 :)我下載並安裝了,但是當我嘗試鏈接並編譯時,出現以下錯誤:'/tmp/ccakGVl9.o:在函數'main'中: ILD.c :(.text + 0x651):未定義引用' unac_string」 collect2:LD返回1個退出狀態 '我的代碼: '#包括 // ... 字符*總分= 0; size_t out_length = 0; (unac_string(「ISO-8859-1」,「été」,strlen(「été」),out和out_length)){printf(「unac_string」);其他{ printf(「%。* s0」,out_length,out); free(out); }' – Jack 2012-03-14 15:59:00

+0

我在'gcc'上使用'-lunac'選項解決了問題,並將ISO-8859-1編碼改爲UTF-8編碼,現在工作正常。非常感謝你:) – Jack 2012-03-14 21:02:02

+0

不客氣。我編輯它到答案:) – 2012-03-14 23:04:42