Как узнать количество символов в строке с кириллицей 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;
}