Как узнать количество символов в строке с кириллицей C++?

int main() {
    string input;

    string s = "Пример!";
    cout << s.length();


    return 0;
}

У меня данный код выводит 13. Зависит от компилятора. Как я понял это из-за того, что кириллица занимает 2 байта. Можно ли как-то просто узнать количество символов не кастуя к массиву?


Ответы (3 шт):

Автор решения: Kiselevsky Dima

Самый простой способ это пересчитать символы в цикле.

int main() {
    string input;
    
    string s = "Пример!";
    int i = 0;         // счетчик символов
    for (auto c : s)  // инкрементируем на каждом символе
    {
        i++;
    }
    cout << i;         // выводим результат
    return 0;
}
→ Ссылка
Автор решения: Cubbi

Зависит от множества деталей, но если ОС и компилятор вменяемые, то по-простому можно так:

#include <iostream>
#include <string>
#include <codecvt>
#include <locale>

int main() {
  std::string s = "Пример!";

  // у меня пишет "7"
  std::cout << std::wstring_convert<std::codecvt_utf8<char32_t>,
                                    char32_t>{}.from_bytes(s).size() << '\n';
}

(они типа это deprecated в C++17, но заменить пока нечем, так что не удалят)

→ Ссылка
Автор решения: NekitKuzmenko

Просто пересчёт количества символов, без разницы кириллица или что-то другое. И лучше по возможности использовать char массив, а не string, string больше нагружает скрипт. Самый простой способ подсчёта символов:

char* arr = new char[11];
arr = "test";
int len = 0;
    
for(int i = 0; ; i++) {
        
    if(arr[i] != NULL) len++; else break;
        
}
→ Ссылка