从字符串中删除元音。

时间:2014-07-23 19:29:58

标签: c string character-encoding fgets

我试图从stdin中读取一个字符串,然后用#39; _'替换字符串上的元音。 当然它很简单,但我也想用重音元音代替。显然,以下代码对这些情况不起作用。我尝试了几件事,比如读char char,但是简短,考虑一下line [i]< 0等的情况

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:考虑使用的编码是Western(ISO-8859-1) - &gt; http://www.alanwood.net/demos/ansi.html

2 个答案:

答案 0 :(得分:1)

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

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

如果您想要快捷方便,请在for循环中添加以下内容,以查看字符如何映射到值:

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

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

答案 1 :(得分:0)

我使用了以下数据 的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;

}