c语言如何判断字符串中有几个中文,下面代码意思

#include <stdio.h>
int main()
{
for (;;){
char s[100];
int i,n=0;
gets(s);
for(i=0;s[i];i++) //啥意思 s[i]是没有循环条件?
if(s[i]<0) //啥意思
i++,n++;
printf("%d\n",n);
}
return 0;
}

for(i=0;s[i];i++) //扫描整个字符串,s[i]就是s[i]!='\0',即未到串尾
if(s[i]<0) //汉字的ASCII码属于“扩展ASCII码”,其每个字符的码值大于127,由于字义的是char数组,每个元素的表示范围为-128~+127,所以,大于127的字符在char中表现为负数。
i++,n++; //判断为一个汉字,由于每个汉字占两个字节,所以这里先i+1,再记录汉字数n也加1
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-10
这里的判断条件s[i]等效于s[i]!='\0'
判断条件s[i]<0是利用GB字符集里的中文字符用2个字节,且最高位为1
第2个回答  2017-12-10
因为中文编码区别英文编码就是体现在ASCII码上,普通西文字符,一般每个的ASCII码取值都在0~127之间,而中文编码一般是两个字符为一组(两个字符组成一个汉字),每个字符取值都在-128~-1之间,那么对于有符号的char来说小于0的就是汉字编码了,这个程序中遇到汉字字符后多进行一次i++就是跳过两个汉字编码字符的意思
相似回答