本帖最后由 行客 于 2019-1-26 17:56 编辑
if ((int)ch < 0) // 这个位置只知道是用来判断中文字符的,但是不知道什么原理,求解!!!!!!!!!!!
{
target += 2;
}
这段代码的本意是判断如果是中文,则指针向后移动2位,也就是中文字符也计算为1,否则中文字符占2个字节,计算值时会加成2。
但最大的问题是,if ((int)ch < 0)这个判断本身就不严谨。如果只是用ASCII码小于0来判断是否为中文其实不一定正确,日文、韩文等都会小于0。
另外,中文是占两个字节,所以上面代码应该修改为
if ((int)ch < 0) // 这个位置只知道是用来判断中文字符的,但是不知道什么原理,求解!!!!!!!!!!!
{
target += 1;
}
整体代码为:
- #include <stdio.h>
- #define MAX 1024
- int main()
- {
- char str[MAX];
- char *target = str;
- char ch;
- int length = 0;
- printf("请输入一个字符串:");
- fgets(str, MAX, stdin);
- while (1)
- {
- ch = *target++;
- if (ch == '\0')
- {
- break;
- }
- if ((int)ch < 0) // 这个位置只知道是用来判断中文字符的,但是不知道什么原理,求解!!!!!!!!!!!
- {
- target += 1;//注意这里
- }
- length++;
- }
- printf("您总共输入了 %d 个字符!\n", length - 1);
- return 0;
- }
复制代码