鱼C论坛

 找回密码
 立即注册
查看: 989|回复: 4

[已解决]s1e22课后题

[复制链接]
发表于 2020-2-19 04:33:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用 fgets 函数(使用文档 -> 传送门)读取用户输入的字符串(英文),并用指针法来计算字符串的字符个数

                               
登录/注册后可看大图
你可能发现写出来的代码只能统计英文字符的个数,遇到中文字符结果就会出错。请自行观察你当前系统对中文字符的处理方式,并设计一个可以统计中文字符以及中英文混合字符的程序。
为啥这个里面的教程1个汉字占1个字符 我写出来确实三个
  1. #include <stdio.h>

  2. #define MAX 1024

  3. int main()
  4. {
  5.         char str[MAX];
  6.         int n;

  7.         printf("请输入一个字符串:");
  8.         fgets(str, MAX, stdin);

  9.         char *p;
  10.         p = str;

  11.         for(n = 0; ; n++)
  12.         {
  13.                 if(*(p + n) == 0)
  14.                         break;
  15.         }

  16.         printf("您一共输入%d个字符!\n", n - 1);

  17.         return 0;
  18. }
复制代码


请输入一个字符串:鱼C工作室-Fishc.com
您一共输入23个字符!

一个汉字占3个字符请问是为什么
最佳答案
2020-2-19 07:21:14
中文字符本来就和普通字符不同。但是编译器不一样,字符所占的字节数也不一样。
但是每个汉字转换成int类型都是负的,你可以将字符串转换成整型在进行判断,如果所对应的整形数据小于零,那么将指针往后移。在我用的编译器里汉字占两个字节,我会将指针往后移一位,在你那里指针占三个字节,你应该把指针往后移两位。
具体代码我就不写了,答案上有。我提供一个思路。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-19 07:21:14 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +3 鱼币

中文字符本来就和普通字符不同。但是编译器不一样,字符所占的字节数也不一样。
但是每个汉字转换成int类型都是负的,你可以将字符串转换成整型在进行判断,如果所对应的整形数据小于零,那么将指针往后移。在我用的编译器里汉字占两个字节,我会将指针往后移一位,在你那里指针占三个字节,你应该把指针往后移两位。
具体代码我就不写了,答案上有。我提供一个思路。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 09:27:13 | 显示全部楼层

回帖奖励 +3 鱼币

不同编译器处理中文的方法都不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 09:37:03 | 显示全部楼层
每个编译器多不一样,一个汉字在我这里是 2 个字符:

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 09:38:50 | 显示全部楼层

回帖奖励 +3 鱼币

领一下鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-4 20:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表