如何在C中使用'æ','ø'和'å'进行操作

Mar*_*sen 5 c arrays replace char wchar

我用C编写了一个程序,它可以替换或删除字符串中的所有元音.另外我希望它适用于这些角色:'æ','ø','å'.

我试图使用strstr(),但我没有设法实现它而不替换包含'æ','ø'或'å'的行上的所有字符.我也读过关于wchar的内容,但这似乎只是让一切变得复杂.

该程序正在使用这个字符数组:

char vowels[6] = {'a', 'e', 'i', 'o', 'u', 'y'};
Run Code Online (Sandbox Code Playgroud)

我试过这个数组:

char vowels[9] = {'a', 'e', 'i', 'o', 'u', 'y', 'æ', 'ø', 'å'};
Run Code Online (Sandbox Code Playgroud)

但它给出了这些警告:

警告:多字符字符常量[-Wmultichar]

警告:隐式常量转换溢出[-Woverflow]

如果我想用'a'替换每个元音,它将'å'替换为' a'.

我也尝试过'æ','ø'和'å' 的UTF-8.

char extended[3] = {"\xc3\xa6", "\xc3\xb8", "\xc3\xa5"};
Run Code Online (Sandbox Code Playgroud)

但它给出了这个错误:

char数组初始值设定项中的多余元素

有没有办法使这项工作不会太复杂?

Clo*_*oud 4

有两种方法可以使该角色可用。第一个是代码页,它允许您使用扩展的 ASCII 字符(值 128-255),但代码页取决于系统和区域设置,因此一般来说这是一个坏主意。

\n\n

更好的选择是使用unicode。unicode 的典型情况是使用宽字符文字,就像在这篇文章中一样

\n\n
wchar_t str[] = L"\xce\xb1\xce\xb3\xcf\x81\xcf\x89";\n
Run Code Online (Sandbox Code Playgroud)\n\n

您的代码的关键问题是您尝试将ASCII 与 UTF8 进行比较,这可能是一个问题。解决方案很简单:将所有文字以及字符串转换为宽字符 UTF8 等效项。您需要使用通用编码而不是混合它,除非您有转换函数来帮助。

\n