Подсчет количества различных символов кирилицы
Простая функция, на вход принимающая строку, а на выходе отдающая число - количество различных русских символов, встречающихся в строке. Может кому пригодится.
Функция ПосчитатьКоличествоРазличныхСимволовКириллицы(Знач СтрокаПарсинга) Экспорт
//Функция возвращает число - количество различных символов кириллицы в строке. Минимальное значение = 0.
МассивНайденныхРазличныхСимволов = Новый Массив;
СтрокаПарсинга = СокрЛП(СтрокаПарсинга);
СтрокаПарсинга = нрег(СтрокаПарсинга);
ДлинаСтрокиПарсинга = СтрДлина(СтрокаПарсинга);
Если ДлинаСтрокиПарсинга > 0 Тогда
СимволыКирилицы = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
Для а = 1 по ДлинаСтрокиПарсинга Цикл
ТекущийСимволСтроки = Сред(СтрокаПарсинга,а,1);
Если МассивНайденныхРазличныхСимволов.Найти(ТекущийСимволСтроки) = Неопределено
и СтрНайти("абвгдеёжзийклмнопрстуфхцчшщъыьэюя",ТекущийСимволСтроки) > 0 Тогда
МассивНайденныхРазличныхСимволов.Добавить(ТекущийСимволСтроки);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат МассивНайденныхРазличныхСимволов.Количество(); //Количество различных символов кириллицы, найденных в строке
КонецФункции
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Если МассивНайденныхРазличныхСимволов.Найти(ТекущийСимволСтроки) = Неопределено
и СтрНайти("абвгдеёжзиклмнопрстуфхцчшщъыьэюя",ТекущийСимволСтроки) > 0 Тогда
МассивНайденныхРазличныхСимволов.Добавить(ТекущийСимволСтроки);
КонецЕсли;
Такое через Соответствие делается. Метод массива Найти довольно затратный.
и СтрНайти("абвгдеёжзиклмнопрстуфхцчшщъыьэюя",ТекущийСимволСтроки) > 0 Тогда
МассивНайденныхРазличныхСимволов.Добавить(ТекущийСимволСтроки);
КонецЕсли;
а не проще ли символы, если кириллица добавлять к новой строке, проверяя что там таких нет, а потом посчитать длину строки? проверку на кириллицу тоже можно делать не поиском в строке шаблоне а по коду символа - больше такого и меньше сякого
(8)Идея интересная, но не понятен смысл, зачем сравнивать длину до и после?
Можно пойти от обратного - задать в коллекции все символы кириллицы, и обходить эту коллекцию.
И для каждого символа - искать в исходной строке.
Если символ в строке есть, то к счетчику добавлять 1.
Можно пойти от обратного - задать в коллекции все символы кириллицы, и обходить эту коллекцию.
И для каждого символа - искать в исходной строке.
Если символ в строке есть, то к счетчику добавлять 1.
СимволыКирилицы = "абвгдеёжзиклмнопрстуфхцчшщъыьэюя";
СимволыКирилицы=СимволыКирилицы+ВРЕГ(СимволыКирилицы);
МассивСтрокНеКириллицы=СтрРазделить(СтрокаПарсинга,СимволыКирилицы,Истина);
СтрокиНеКириллицы=СтрСоединить(МассивСтрокНеКириллицы);
МассивСтрокКириллицы=СтрРазделить(СтрокаПарсинга,СтрокиНеКириллицы,Ложь);
СтрокаКириллицы=СтрСоединить(МассивСтрокКириллицы);
Сообщить(СтрДлина(СтрокаКириллицы));
(13) верно, не заметил про уникальность, тогда через соответствие
Соот=Новый Соответствие;
Для сч=1 по СтрДлина(СтрокаПарсинга) Цикл
СимвКир=Сред(СтрокаПарсинга,сч,1);
Если СтрНайти(СимволыКирилицы,СимвКир)>0 Тогда
Соот.Вставить(СимвКир,СимвКир);
КонецЕсли;
КонецЦикла;
Сообщить(Соот.Количество());
(17) можно сделать гибрид из вариантов (12) и (14)
СимволыКирилицы = "абвгдеёжзиклмнопрстуфхцчшщъыьэюя";
СимволыКирилицы=СимволыКирилицы+ВРЕГ(СимволыКирилицы);
МассивСтрокНеКириллицы=СтрРазделить(СтрокаПарсинга,СимволыКирилицы,Истина);
СтрокиНеКириллицы=СтрСоединить(МассивСтрокНеКириллицы);
МассивСтрокКириллицы=СтрРазделить(СтрокаПарсинга,СтрокиНеКириллицы,Ложь);
СтрокаКириллицы=СтрСоединить(МассивСтрокКириллицы);
Соот=Новый Соответствие;
Для сч=1 по СтрДлина(СтрокаКириллицы) Цикл
СимвКир=Сред(СтрокаКириллицы,сч,1);
Соот.Вставить(СимвКир,СимвКир);
КонецЦикла;
Сообщить(Соот.Количество());
Показать
(18)ваше решение красивое, другие то-же работают, здесь ведь соревнуемся алгоритмами? А 1С все-таки больше язык управления для БД, а не для чистых нейронов ;) тут еще вопрос, что от платформы к платформе результаты по скорости разных решений могут меняться, а платформы, последнее время, выходят как горячие пирожки.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот