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数组初始值设定项中的多余元素
有没有办法使这项工作不会太复杂?
有两种方法可以使该角色可用。第一个是代码页,它允许您使用扩展的 ASCII 字符(值 128-255),但代码页取决于系统和区域设置,因此一般来说这是一个坏主意。
\n\n更好的选择是使用unicode。unicode 的典型情况是使用宽字符文字,就像在这篇文章中一样:
\n\nwchar_t str[] = L"\xce\xb1\xce\xb3\xcf\x81\xcf\x89";\nRun Code Online (Sandbox Code Playgroud)\n\n您的代码的关键问题是您尝试将ASCII 与 UTF8 进行比较,这可能是一个问题。解决方案很简单:将所有文字以及字符串转换为宽字符 UTF8 等效项。您需要使用通用编码而不是混合它,除非您有转换函数来帮助。
\n