我试图从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
答案 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;
}