我正在编写一个简单的程序来计算我放入链表中的文本文件 (UTF-8) 中的字符数。一切似乎都运行良好,除了它为每个实例计算两次 æ ø å(挪威字母表中的最后三个字符)。所以如果字符串是 æøå,我得到 6 而不是 3。如何解决这个问题?
int length()
{
pointer = root; // Reset pointer
int i; // Looping through data in node
int len = 0; // Counting characters
int sizedata = sizeof(pointer->data); // Sets size limit for data in node
while(pointer != NULL)
{
for(i = 0; i < sizedata; i++) // Looping through data in node
{
if(pointer->data[i] == '\0') break; // Stops count on end of string
len++; // Counting characters
}
pointer = pointer->next; // Linking to next node
}
printf("Length of text is: %d characters\n", len);
}
最佳答案
我根据这个改了代码site .对于 len++
之前的 if
语句,一切都是一样的;
int length()
{
pointer = root; // Reset pointer
int i; // Looping through data in node
int len = 0; // Counting characters
int sizedata = sizeof(pointer->data); // Sets size limit for data in node
while(pointer != NULL)
{
for(i = 0; i < sizedata; i++) // Looping through data in node
{
if(pointer->data[i] == '\0') break; // Stops count on end of string
if ((pointer->data[i] & 0xC0) != 0x80) //count characters
len++;
}
pointer = pointer->next; // Linking to next node
}
printf("Length of text is: %d characters\n", len);
}
注意(感谢@Eljay): 这是在计算 Unicode 代码点(以 UTF-8 编码),而不是字符(字形)。一些字符由多个代码点组成。例如,对于 x 和两个组合代码点,x̝̌ 是 78 cc 9d cc 8c。此例程会将 1 个字符计为 3(代码点)的长度。
关于c - 如何正确计算 C 中的 æ ø å(Unicode 作为 UTF-8)字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25803627/