【问题标题】:Removing vowels from a string.从字符串中删除元音。
【发布时间】:2014-07-23 19:29:57
【问题描述】:

我正在尝试从标准输入读取字符串并将字符串上的元音替换为“_”。 当然这很简单,但我也想替换重音元音。显然,以下代码不适用于这些情况。我已经尝试了几件事,例如逐个字符地读取字符,但简而言之,请考虑 line[i]

while(fgets(line, 250, stdin)){
    size=strlen(line);
    for(i=0;i<size;i++){
        if(line[i]==65 || line[i]==69 ||line[i]==73 ||line[i]==79 ||line[i]==85 ||line[i]==97 ||line[i]==101 ||line[i]==105 ||line[i]==111 ||line[i]==117){
            line[i]='_';
        }
     }
}

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

Ps: 考虑使用的编码是西方 (ISO-8859-1) -> http://www.alanwood.net/demos/ansi.html

【问题讨论】:

  • 你知道65这个神奇的数字没有是大写的'A'吗?那么为什么不简单地使用字符文字'A',它始终是大写字母'A'
  • 你有什么问题?
  • 我知道,但这不是我提出的问题...
  • @user1916860,鉴于您有一个特定的代码页可以使用,您可以使用该页的字符代码。或者您可以使用支持此代码页的 Unicode 库。
  • 注意,解决这个问题的一种方法是创建一串重音元音,然后使用for(i=0;i&lt;strlen(str);i++) printf("%c %d\n", str[i], str[i]); 打印值。这应该告诉你数字是什么。

标签: c string character-encoding fgets


【解决方案1】:

您可能遇到了有符号与无符号字符的问题。您提供的链接上显示的重音字符的 ANSI 值大于有符号字符的最大大小。这可能也是您看到负字符值的原因。

如果你想正确解决这个问题,我建议使用宽字符格式和字符常量。

如果您想要快速简单的操作,请在您的 for 循环中添加以下内容,以查看字符如何映射到值:

printf( "%c %d\n", line[i], (int)line[i] );

然后将适当的值添加到您的 if。

【讨论】:

  • %s 应该是 %c,否则,是的
  • 我会解决的。谢谢
【解决方案2】:

我使用了以下数据 htyuàsdsècvcvcàdìssd

以下代码适用于重音字符。结果是 htyu_sds_cvcvc_d_ssd

   #include <stdio.h>
   #include <wchar.h>
   #include <locale.h>
   int main(int argc, char **argv){
      setlocale(LC_CTYPE, "UTF-8");
      FILE *f = fopen("/Users/sandeepshabd/objectiveC/C_TEST_App/C_TEST_App/file.txt",  "r, ccs=UTF-8");
if (!f)
    return 1;

for (wchar_t c; (c = fgetwc(f)) != WEOF;){
    switch (c) {
        case L'à': c=L'_'; break;
        case L'è': c=L'_';break;
        case L'é': c=L'_';break;
        case L'ì': c=L'_';break;
        case L'ò': c=L'_';break;
        case L'ù': c=L'_';break;
        default:    break;
    }
    wprintf(L"%c", c);
}


fclose(f);
return 0;

}

【讨论】:

  • 这不起作用,因为 ascii 字符是 8 位而不是 16 位,所以很多/大多数字符都会失败。只需使用 getc 之类的东西,它返回一个 int,并且只比较低 8 位。
  • 我们在这里讨论拉丁字符。 UTF 8 不支持拉丁字符吗?我知道当我们可能为其他国际字符集时,事情可能无法正常工作。 UTF-8 Latin Support
  • @user3629249:ASCII 字符中没有重音元音。
猜你喜欢
  • 1970-01-01
  • 2018-11-23
  • 2021-05-23
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多