【发布时间】:2012-10-25 15:49:47
【问题描述】:
也许我遗漏了一些明显的东西,但是有没有一种“无痛”的方法可以将给定文本中的重音字母替换为非重音字母?我只能使用标准的 ANSI C 库/头文件,所以我束手无策。到目前为止我尝试过的:
unsigned char currentChar;
(...)
if (currentChar == 'à') {
currentChar = 'a';
}
else if (currentChar == 'è' || currentChar == 'é') {
currentChar = 'e';
}
else if (...)
但是,这不起作用。检测带有扩展 ASCII 值的重音元音也不是一种选择,因为我注意到它会根据系统区域设置而变化。
有什么提示/建议吗?
(更新)
感谢您的回答,但我并不是真的要求解决这个问题的最佳方法 - 我稍后会考虑。我只是在寻求一种检测重读元音的方法,因为上面的代码只是忽略了它们。
(更新 #2)
好的。让我澄清一下:
#include <stdio.h>
int main(void) {
int i;
char vowels[6] = {'à','è','é','ì','ò','ù'};
for (i = 0; i < 6; i++) {
switch (vowels[i]) {
case 'à': vowels[i] = 'a'; break;
case 'è': vowels[i] = 'e'; break;
case 'é': vowels[i] = 'e'; break;
case 'ì': vowels[i] = 'i'; break;
case 'ò': vowels[i] = 'o'; break;
case 'ù': vowels[i] = 'u'; break;
}
}
printf("\n");
for (i = 0; i < 6; i++) {
printf("%c",vowels[i]);
}
printf("\n");
return 0;
}
此代码仍然打印“àèéìòù”作为其输出。这是我的问题。我很欣赏答案,但是告诉我实现转换映射或开关/案例结构是没有意义的。我会考虑稍后。
【问题讨论】:
-
虽然可能无法解决您的问题,但我至少会使用
switch而不是很多if...else if语句。 -
什么是 ANSI C? AFAIK,ANSI 与 ISO 标准委员会就 C 的修订保持同步,目前的修订是 C11。你的意思是那个还是 C89?
-
南希,你是怎么编译的?当我编译你的代码时,我得到很多`警告:多字符字符常量`-即。你的重音字符不是单个字符
-
@WilliamMorris:很好的观察,源代码编码可能是 UTF-8 但编译器不支持它并将字符视为多字节“字符”常量(不比较相等到字符)。
标签: c character-encoding ascii non-ascii-characters