鱼C论坛

 找回密码
 立即注册
查看: 1325|回复: 2

[已解决]S1E22,统计字符串个数(含中文),请问为什么输入中文后结果就不准确了

[复制链接]
发表于 2021-3-8 21:54:40 | 显示全部楼层 |阅读模式

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

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

x
  1. #include<stdio.h>
  2. #define MAX 1024

  3. int main()
  4. {
  5.         char str [MAX];
  6.     char *target=str;
  7.     char ch;
  8.     int length=0;
  9.    
  10.     printf("请输入一个字符串:");
  11.     fgets(str,MAX,stdin);
  12.    
  13.     while(1)
  14.     {
  15.         ch=*target++;
  16.             if(ch =='\0')
  17.             {
  18.                     break;
  19.                 }
  20.                 if((int)ch<0)
  21.                 {
  22.                         target+=2;
  23.                 }
  24.                 length++;
  25.         }
  26.        
  27.         printf("你总共输入了%d个字符\n",length-1);
  28.         return 0;
  29.        
  30. }
复制代码
最佳答案
2021-3-8 22:19:37
  1. #include<stdio.h>
  2. #define MAX 1024

  3. int main(void)
  4. {
  5.         char ch , str[MAX] , * target                 ;
  6.         int length                                    ;
  7.         printf("请输入一个字符串:")                  ;
  8.         fgets(str , MAX , stdin)                      ;
  9.         for(length = 0 , target = str ; * target ; target ++ , length ++) {
  10.                 if(* target < 0) target ++            ; // windows 系统,每个汉字占用 2 个字节
  11.         }
  12.         printf("你总共输入了%d个字符\n" , length - 1) ; // length - 1 为了减掉字符串末尾的换行符 '\n'
  13. }
复制代码
屏幕截图 2021-03-08 215401.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-8 22:03:39 | 显示全部楼层
  1.                 if((int)ch<0)
  2.                 {
  3.                         target+=2;   //改成 target ++; 或 target+=1;
  4.                 }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-8 22:19:37 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. #define MAX 1024

  3. int main(void)
  4. {
  5.         char ch , str[MAX] , * target                 ;
  6.         int length                                    ;
  7.         printf("请输入一个字符串:")                  ;
  8.         fgets(str , MAX , stdin)                      ;
  9.         for(length = 0 , target = str ; * target ; target ++ , length ++) {
  10.                 if(* target < 0) target ++            ; // windows 系统,每个汉字占用 2 个字节
  11.         }
  12.         printf("你总共输入了%d个字符\n" , length - 1) ; // length - 1 为了减掉字符串末尾的换行符 '\n'
  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 06:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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