|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼课后作业:
用fgets函数输入字符,测字符个数个数
请问:
什么意思呀,不是指向下两个字符吧;
而且我用Xcode复制代码运行的结果也不对
答案代码:
- #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 += 2;
- }
- length++;
- }
- printf("您总共输入了 %d 个字符!\n", length - 1);
- return 0;
- }
复制代码
本帖最后由 jackz007 于 2020-12-17 11:48 编辑
在 Linux 系统下,中文字符采用 UTF-8 编码,每个中文字符占用 3 个字节,这一点与 Windows 不同,Windows 采用 GBK 编码,一个中文字符占用 2 个字节。
在本例中,当 ch < 0 是指字符编码值大于 0x7f (127),对于 char 型的变量而言,就会成为负值,采用 utf-8 编码的汉字的 3 个字节都是负值。本例代码便是根据这个特点来区分中英、文字符,从而完成统计的。
例如:"中国",GBK 编码为 D6 D0 B9 FA 一共占用了 4 个字节;UTF-8 编码为 E4 B8 AD E5 9B BD 总共占用了 6 个字节,而且,它们的共同特点是,几乎每个字节的编码都超过 7F(127),对于 signed char 来说,就是负值。
|
|