2012-03-14 170 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