C语言输入一段文字(英文和中文字符均有),要求输出其中的汉字问题。求代码。例如:

用scanf()函数输入的文本为“wer今,天,天e气r.\真 。好。”
则输出为“今天天气真好”
求大神给个代码,谢谢了。
看来这个问题有难度,好吧,解决问题了,追加至20分,不要嫌少啊,我没财富了。。

由于多字节的字符,在按单字节方式取出时,都会大于127(ASCII表上限),所以只要判断取出的字符对应整数值大于127,那么就可以判断为多字节字符的组成部分,于是得到下面这个程序。
char input[] = "我I爱Love你You";
char *p = input;

char output[50];
int i = 0;

while((*p) != '\0')
{
if ((unsigned char)(*p) > 0x7F)
{
output[i] = *p;
i++;
}

p++;
}

output[i]='\0';
printf("%s", output);追问

你这个可以去除英文字符了,我想把中文的标点也去除。怎么修改?

追答

要去除中文标点,那这个就比较复杂了。得先做个中文标点的数组,然后在下面的筛选循环里增加检测中文标点的代码。你只要记得中文标点的判断要判断连续的2个字节就好了。

判断的时候,要注意一是连续的2个字节,并且要按2字节对齐。

追问

好了,我已经写出来了,其实不用你说的那么麻烦,只需要加一点点代码就行了,不过你这代码给我的帮助很大,谢谢你了。由于你也没有完美解决因此就将财富值加到10吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-30
这个就是ascii的编码问题,就是去除文本中值小于128的数据
其实很简单,在编码中,英文只占0~127,也就是一个字节中的最高位是0
汉字中,一个字节的最高位一定是1,并且两个字节组成一个汉字的编码

根据这个原理,那么读入这个文本,存储到一个字符串中,把小于128的单元去掉,组成一个新的数组,puts输出即可(这个系统自动两个配合显示一个汉字)
前提是你的dos窗口支持汉字显示,如果不支持,那就是乱码追问

嗯,但这只是去除了英文字符,还有中文的标点符号也是两个字节的,怎么去除啊,你可以编编代码么?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网