c - 如何在 C 中对 'æ' 、 'ø' 和 'å' 进行操作

标签 c arrays replace char wchar

我用 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/

相关文章:

delphi - 组合多个 TBytes 数组的最佳方式

c++ - 将数组的一部分复制到 C++ 中的 std::vector

Jquery 替换不适用于长文本

c - 程序在停止工作之前可以执行的最大计算次数是否存在?

c - 为自身定义一个宏符号

c - 撤消功能在达到游戏初始状态后无法正常工作

c - 当我运行代码时,如何才能看到我在 Netbeans 中编写的内容?

python - 从项目列表创建特定形状的 Pandas 数据框

string - 语法感知子字符串替换

sed - 通过 sed 备份我的硬盘 `backup` 目录中的每个替换文件?