[英]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.