【问题标题】:Comparing and replacing accented/special characters in C比较和替换 C 中的重音/特殊字符
【发布时间】:2021-04-24 15:33:25
【问题描述】:

所以我在 C 中有这个示例字符串,其中包含以下内容:

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

我需要查找和替换特殊字符,例如“ç”,并将它们转换为非重音字符(例如,“ç”会变成“c”)。

我真的为此苦苦挣扎,四处搜索,但找不到任何可以帮助解决这个问题的东西。我尝试使用 usint strchr 将文本的各个字符与特殊字符进行比较,如下所示,但它不起作用。

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

有什么建议吗?提前谢谢你。

【问题讨论】:

  • 取决于编码。 printf("%d\n", (int) sizeof("ç")); 是什么?
  • text_string 未在函数中使用,list_string 未定义。发布可编译的代码。
  • 刚刚编辑了答案,在将我的内容复制到我的帖子中时出现了一点错字,它是 text_string 而不是 list_string 但在我的函数中已得到纠正。您要求的 printf 打印数字 3。
  • 您将需要使用名为 ICU 或 libICU 的库。见site.icu-project.org
  • 这里有一个小东西可以在 Python 中做你想做的事情。应该让您了解如何在 C 中执行此操作。基本上标准化为 NKFD 并重新编码为 ASCII。 gist.github.com/tantale/a824fa0948d986d824e6a9965b488d5f

标签: c


【解决方案1】:

在 OP 的系统上,"ç" 的长度为 3,(例如 '0xc3''0xa7''0x00')因此它不会被编码为单个字符。

常见的编码是 UTF8:U+00E7 ç c3 a7 LATIN SMALL LETTER C WITH CEDILLA

而是在text_string 中查找字符串 "ç" 并用较短的字符串"c" 替换。

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 2017-05-02
    • 2023-03-03
    • 2012-01-07
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多