|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
本帖最后由 额外减小 于 2023-1-9 16:29 编辑
这是将中文字符当作一个字符 ↓
- #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 ++;
- }
- length++;
- }
- printf("您总共输入了 %d 个字符!\n", length - 1);
- return 0;
- }
复制代码
这是将中文字符当作两个字符(ANSI)↓
- #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;
- }
- length++;
- }
- printf("您总共输入了 %d 个字符!\n", length - 1);
- return 0;
- }
复制代码
其实问题出在原本24行的target+=2
你如果检测到汉字(此时target已经移到汉字的第2个字节部分,你再往后移两位,就又移了两字节,这样就少检测了)
|
|