中文字符计算
为什么这个不能计算中文字符#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: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]