История изменений
Исправление intelfx, (текущая версия) :
Посчитать codepoint-ы — это тоже хрень:
size_t utf8_strcodepoints (const char* ptr)
{
size_t ret = 0;
while (*ptr) {
if (*ptr < 0x80 || *ptr > 0xBF)
++ret;
++ptr;
}
return ret;
}
Всё дело в том, что подсчёт количества codepoint-ов, подсчёт количества знакомест и подсчёт количества байт — задачи совершенно разные. При этом первая (если подумать) не имеет практического смысла, вторая не имеет смысла для немоноширинных шрифтов, а третья выполняется обычным strlen-ом.
Отсюда и вопрос: а чего он, собственно, хочет получить?
Исправление intelfx, :
Посчитать codepoint-ы — это тоже хрень:
size_t utf8_strcodepoints (const char* ptr)
{
size_t ret = 0;
while (*ptr) {
if (*ptr < 0x80 || *ptr > 0xBF)
++ret;
++ptr;
}
return ret;
}
Всё дело в том, что подсчёт количества codepoint-ов, подсчёт количества знакомест и подсчёт количества байт — задачи совершенно разные.
Но, вообще говоря, первая задача не имеет практического смысла, вторая не имеет смысла для немоноширинных шрифтов, а третья выполняется обычным strlen-ом. Отсюда и вопрос: а чего он, собственно, хочет получить?
Исходная версия intelfx, :
Посчитать codepoint-ы — это тоже хрень:
size_t utf8_strcodepoints (const char* ptr)
{
size_t ret = 0;
while (*ptr) {
if (*ptr < 0x80 || *ptr > 0xBF)
++ret;
++ptr;
}
return ret;
}
Всё дело в том, что подсчёт количества codepoint-ов, подсчёт количества знакомест и подсчёт количества байт — задачи совершенно разные.
Но, вообще говоря, первая задача не имеет практического смысла, вторая не имеет смысла для немоноширинных шрифтов, а третья выполняется обычным strlen-ом. Отсюда и вопрос: а чего он, собственно, хочет получить своим strlen'ом?