这是对我的previous question的后续处理。我成功实现了检查虚拟字符的算法。下一个问题来自迭代字符串中的所有字符。我这样做,像这样:用模糊字符对字符串/ strlen进行迭代
int main()
{
char* str = "Hej du kalleåäö";
printf("length of str: %d", strlen(str));
for (int i = 0; i < strlen(str); i++)
{
printf("%s ", to_morse(str[i]));
}
putchar('\n');
return 0;
}
的问题是,由于umlauted字符,它打印18,也使得to_morse功能失效(忽略这些字符)。 toMorse方法接受一个无符号字符作为参数。解决这个问题的最好方法是什么?我知道我可以在这里检查变音符字符而不是letterNr函数,但我不知道这是否是一个漂亮/合理的解决方案。
您是否尝试过在该回复中描述的解决方案到你以前的问题? http://stackoverflow.com/questions/1725124/accented-umlauted-characters-in-c/1725169#1725169 – 2009-11-13 19:38:18
@Carl Smotricz是对的:图书馆是你的朋友在这里。 UTF-8很聪明,这意味着它也不是微不足道的。 (关于Unicode很少很容易理解:人类语言加载了特殊情况)。我可以建议看一下GLib的'g_utf8_strlen'吗?它不能解决你的紧急问题,但你会学到很多。 http://git.gnome.org/cgit/glib/tree/glib/gutf8.c – quark 2009-11-13 19:45:01
@Miroslav:是的,我尝试了这个解决方案,但它给了我双重打印。 – 2009-11-13 20:06:39