我用 C 编写了一个程序,它可以替换或删除字符串中的所有元音。此外,我希望它适用于这些字符:'æ'、'ø'、'å'。
我曾尝试使用 strstr(),但如果不替换包含“æ”、“ø”或“å”的行中的所有字符,我就无法实现它。 我也读过 wchar ,但这似乎只会使一切复杂化。
程序正在处理这个字符数组:
char vowels[6] = {'a', 'e', 'i', 'o', 'u', 'y'};
我试过这个数组:
char vowels[9] = {'a', 'e', 'i', 'o', 'u', 'y', 'æ', 'ø', 'å'};
但它给出了这些警告:
warning: multi-character character constant [-Wmultichar]
warning: overflow in implicit constant conversion [-Woverflow]
如果我想用“a”替换每个元音,它会将“å”替换为“�a”。
我也试过 UTF-8 hexval由 'æ'、'ø' 和 'å' 组成。
char extended[3] = {"\xc3\xa6", "\xc3\xb8", "\xc3\xa5"};
但它给出了这个错误:
excess elements in char array initializer
有没有一种方法可以使它工作而不会使它变得太复杂?
最佳答案
有两种方法可以使该角色可用。第一个是 code pages ,这将允许您 use extended ASCII characters (值 128-255),但代码页依赖于系统和区域设置,因此一般来说这不是一个好主意。
更好的选择是使用 unicode . unicode 的典型情况是使用宽字 rune 字,like in this post :
wchar_t str[] = L"αγρω";
您的代码的关键问题是您试图 compare ASCII with UTF8, which can be a problem .这个问题的解决方案很简单:将所有文字转换为宽字符 UTF8 等价物,以及您的字符串。您需要使用通用编码而不是混合编码,除非您有转换函数来帮忙。
关于c - 如何在 C 中对 'æ' 、 'ø' 和 'å' 进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32694980/