2010-11-01 36 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

相关问题