#include <stdio.h>
#include <ctype.h> // 包含 isprint 函数
int main() {
char str[100];
int i = 0;
int count = 0;
printf("请输入一段字符串:");
if (fgets(str, sizeof(str), stdin) != NULL) {
// 遍历字符串中的每个字符
while (str[i] != '\0') {
// 检查当前字符是否为可打印字符
if (isprint(str[i])) {
// 如果是单字节的 ASCII 字符(最高位为 0)
if ((str[i] & 0x80) == 0) {
count++; // 计数加 1
i++; // 移动到下一个字符
}
// 如果是 UTF-8 编码的多字节字符的起始字节(最高三位为 1110)
else if ((str[i] & 0xE0) == 0xE0) {
count++; // 计数加 1
i += 3; // 跳过后续的 2 个字节
}
}
else {
// 如果是无效字符(如换行符、空格等),跳过
i++;
}
}
// 输出结果
printf("%s", str); // 输出原始字符串
printf("这串字符的有效长度为:%d\n", count); // 输出有效字符的长度
} else {
printf("读取失败。\n");
}
return 0;
}