可以使用与此类似的方法来完成此操作吗:
只要用户通过 scanf 输入的字符串的当前元素不是 ,就将“length”int 加一,然后打印出长度。
如果有人能指导我通过尽可能最简单的方式,我将非常感激,因为我是初学者。
字符串长度是什么意思?
UTF-8 编码设计得非常好,并且与 C 字符串的定义兼容,UTF-8 字符串只是以 null 结尾的字节数组,就像 ASCII 字符串一样。
使用
strlen(s)
可以轻松获得字节数。如果由于某种原因你不能使用strlen
,它很容易模拟,并且算法正是你在问题中提出的:
size_t string_lengh(const char *s) {
size_t length = 0;
while (*s++ != '\0')
length++;
return length;
}
可以通过计算单字节字符数(范围 1 到 127)和前导字节数(范围 0xC0 到 0xFF)来计算以 UTF-8 编码的代码点数量,忽略连续字节(范围 0x80 到 0xBF)并停在
'\0'
。
这是一个简单的函数来执行此操作:
size_t count_utf8_code_points(const char *s) {
size_t count = 0;
while (*s) {
count += (*s++ & 0xC0) != 0x80;
}
return count;
}
此函数假设
s
指向的数组的内容已正确编码。
另请注意,这将计算代码点的数量,而不是显示的字符数,因为其中一些可能使用多个组合代码点进行编码,例如
<LATIN CAPITAL LETTER A>
后跟<COMBINING ACUTE ACCENT>
。