繁体   English   中英

从字符串中删除元音。

[英]Removing vowels from a string.

我正在尝试从stdin读取一个字符串,并用'_'替换该字符串上的元音。 当然,这很简单,但我也想替换重音元音。 显然,以下代码在这种情况下不起作用。 我尝试了几件事,例如逐字符读取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)-> http://www.alanwood.net/demos/ansi.html

您可能会遇到有符号与无符号字符的问题。 您提供的链接上显示的带重音符号的ANSI值大于签名字符的最大大小。 这可能就是为什么您还会看到负字符值的原因。

如果要正确解决此问题,建议使用宽字符格式和字符常量。

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

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

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

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM