РЕШЕНО Подсчёт числа символов в строке

Тема в разделе "Arduino & Shields", создана пользователем DS2015, 27 сен 2019.

  1. DS2015

    DS2015 Нерд

    Уважаемые форумчане!
    Кто подскажет, как корректно подсчитать число символов в строке. Функцию
    length() не предлагать, ибо полный неадекват при подсчёте символов в строке
    utf-8. Для php существует функция mb_strlen. А для Си что-то подобное есть?
     
  2. b707

    b707 Гуру

    если вы знаете используемую кодировку - проще самому написать. там ведь строчек пять, не более
     
    DetSimen и Vovka нравится это.
  3. Unixon

    Unixon Оракул Модератор

  4. DS2015

    DS2015 Нерд

    Спасибо всем за участие, особенно b707.
    Не особо силён писать короткие "5 строчек", но используя широко известную в узких кругах функцию utf8rus
    получилось такое:
    Код (C++):

    // Функция подсчёта количества символов в строке utf8,
    // состоящей из букв английского и русского алфавитов, цифр, общепринятых символов...

    int mb_strlen(String source)  // как в php :)
    {
      int i,k;
      int target = 0;
      unsigned char n;
      char m[2] = { '0', '\0' };
      k = source.length(); i = 0;

      while (i < k) {
        n = source[i]; i++;

        if (n >= 0xBF){
          switch (n) {
            case 0xD0: {
              n = source[i]; i++;
              if (n == 0x81) { n = 0xA8; break; }
              if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
              break;
            }
            case 0xD1: {
              n = source[i]; i++;
              if (n == 0x91) { n = 0xB7; break; }
              if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
              break;
            }
          }
        }
           m[0] = n; target = target + 1;
      }
    return target - 2;
    }
     
    Главное, что работает!
    Уверен, найдётся немало желающих попинать на длинный код. Извиняйте....
     
    Последнее редактирование: 28 сен 2019