這是對我的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