|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么这个不能计算中文字符
#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 于 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[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 += 1;
- }
- length++;
- }
- printf("您总共输入了 %d 个字符!\n", length - 1);
- return 0;
- }
复制代码
编译、运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 请输入一个字符串:中国人民是爱好和平的人民
- 您总共输入了 12 个字符!
- D:\[00.Exerciese.2022]\C>
复制代码
|
|