在C语言中比较和替换带重音/特殊字符

3

我有一个C语言示例字符串,其中包含以下内容:

char text_string[100] = "A panqueca americana é provavelmente o caféç da manhã mais famoso dos Estados Unidos.";

我需要查找和替换特殊字符,例如 "ç" 并将它们转换为没有重音的对应字符(例如,"ç" 变为 "c")。

我真的很苦恼,搜索了一下但没有找到任何有助于解决这个问题的内容。我尝试使用 strchr 来比较文本的各个字符与特殊字符的相似性,如下所示,但没有成功。

char transform_text(char *text_string){
    for(int i=0; i<100; i++){
        if(strchr("ç", text_string[i]) != NULL )
            text_string[i]='c';
}

有任何建议吗?提前感谢您。


1
取决于编码方式。printf("%d\n", (int) sizeof("ç")); 是什么意思? - chux - Reinstate Monica
2
text_string 没有在函数中使用,list_string 未定义。请提供可以编译的代码。 - chux - Reinstate Monica
if(strchr("ç", text_string[i]) != NULL ) 更改为 if (text_string[i] == 'ç') - Nicholas Hunter
1
你将想要使用名为ICU或libICU的库。请参见http://site.icu-project.org/。 - Zan Lynx
1
这是一个在Python中实现你想要的小功能的代码。它应该能够给你一些如何在C中实现它的想法。基本上,将其规范化为NKFD并重新编码为ASCII。https://gist.github.com/tantale/a824fa0948d986d824e6a9965b488d5f - Zan Lynx
显示剩余3条评论
1个回答

3
在 OP 的系统上,"ç" 长度为 3(例如 '0xc3''0xa7''0x00'),因此它不是作为单个字符编码的。
常见的编码方式是 UTF8:U+00E7 ç c3 a7 LATIN SMALL LETTER C WITH CEDILLA 相反,应在 text_string 中查找 "ç" 字符串,并用更短的字符串 "c" 进行替换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接