失败且常态 发表于 2022-10-17 18:07:04

中文字符计算

为什么这个不能计算中文字符
#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      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 发表于 2022-10-17 18:16:10

本帖最后由 jackz007 于 2022-10-17 18:47 编辑

         Linux 采用 "UTF-8" 编码,每个西文字符占用 1 个字节,每个中文字符占用 3 个字节,Windows 采用 "GBK" 编码,每个西文字符占用 1 个字节,每个中文字符占用 2 个字节,可见,这两个系统每个汉字占用的字节数是不同的。
         这个代码只适合在 Linux 系统下使用,楼主一定是在 Windows 环境下吧?在 Windows 下需要修改这一句
                if ((int)ch < 0)
                {
                        target ++;         // 在不同系统下只要修改这一句就可以了,当前状态适合 Windows 系统。
                }
         修改后的代码
#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      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;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
请输入一个字符串:中国人民是爱好和平的人民
您总共输入了 12 个字符!

D:\\C>
页: [1]
查看完整版本: 中文字符计算