powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная транслитерация.
9 сообщений из 34, страница 2 из 2
Тяпничная транслитерация.
    #39674130
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78mayton1) У меня - штук 5 мультимедийных плееров которые не хавают кириллицу в именах файлов.
почему не поставить 1 AIMP ?
Это внешние устройства. Без операционки. Ну... или ее невозможно идентифицировать. И уж тем
более я не могу поставить на китайский девайс никакого софта.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут с регистром - не так тривиально.

Вобщем этот код

Код: plaintext
1.
2.
3.
		tm['ч'] = "ch"; tm['ш'] = "sh"; tm['щ'] = "ch"; tm['ъ'] = ""; tm['ь'] = ""; tm['я'] = "ya";
		tm['Ч'] = "CH"; tm['Ш'] = "SH"; tm['Щ'] = "CH"; tm['Ъ'] = ""; tm['Ь'] = ""; tm['Я'] = "YA";
	}


Не учитывает плавающий регистр. Особенно переключение в середине слова. Такой кейс маловероятен но всё таки.
Код: plaintext
1.
Салтыков-Щедрин - Saltykov-SСhedrin.



Другой код который я нашел чуть лучше. Но тоже неправильный.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
tatic char[] abcCyr =   {' ','а','б','в','г','д','е','ё', 'ж','з','и','й','к','л','м',
                       'н','о','п','р','с','т','у','ф','х', 'ц','ч', 'ш','щ','ъ','ы',
                       'ь','э', 'ю','я','А','Б','В','Г','Д','Е','Ё', 'Ж','З','И','Й',
                       'К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х', 'Ц', 'Ч','Ш',
                       'Щ','Ъ','Ы','Ь','Э','Ю','Я'};

    static String[] abcLat = {" ","a","b","v","g","d","e","e","zh","z","i","y","k","l","m",
                       "n","o","p","r","s","t","u","f","h","ts","ch","sh","sch", "","i",
                       "","e","ju","ja","A","B","V","G","D","E","E","Zh","Z","I","Y",
                       "K","L","M","N","O","P","R","S","T","U","F","H","Ts","Ch","Sh",
"Sch", "","I", "","E","Ju","Ja"};



Код: plaintext
1.
2.
1) Салтыков-Щедрин - Saltykov-Schedrin.
2) США - SShA
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674228
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, с регистром надо подумать. Может быть еще такое: "Ч. Я. Загоев". Подумаю, сходу не придумалось.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674231
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант: после транслита пройтись в обратную сторону: если на конце прописные буквы, то привести к прописным все кроме первой в слове.
Для английского в С++ все есть: isalpha() isupper() islower()
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674232
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Текст с аббревиатурой.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674235
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, должно быть: Saltykov-SСHedrin
США = SSHA (что не сложно, надо просто без на a-z и A-Z разные массивы иметь
криво, но этож транслитерация. Она никогда и не требовала быть 100%. Особенно в ЧПУ (там вообще кириллица уже давно царствует и ПС не против).
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674237
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я в принципе уже решил свою задачу.

Mp3 файлы переименовал.

Просто в процессе тестирования заметил специфичные кейсы. Которых у меня не было. Но в принципе они возможны.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674241
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С учетом регистра как-то так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
std::string translit(const std::string& str) {
	static std::map<char, std::string> tm;
	if(tm.size() == 0) {
		for (char *s = "абвгдеёжзиклмнопрстуфхцэюАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЭЮ"
				, *d = "abvgdeegziklmnoprstufhceuABVGDEEGZIKLMNOPRSTUFHCEU"; *s; s++, d++) {
			tm[*s] = *d;
		}
		tm['ч'] = "ch"; tm['ш'] = "sh"; tm['щ'] = "ch"; tm['ъ'] = ""; tm['ь'] = ""; tm['я'] = "ya";
		tm['Ч'] = "CH"; tm['Ш'] = "SH"; tm['Щ'] = "CH"; tm['Ъ'] = ""; tm['Ь'] = ""; tm['Я'] = "YA";
	}

	std::string res;
	int check = 0;
	for (const char* s = str.c_str(); *s; s++) {
		if(tm.find(*s) == tm.end()) {
			res += *s;
		} else {
			std::string& c = tm[*s];
			if(check && islower(c[0])) for(size_t i = res.size() - check; i != res.size(); i++) res[i] = tolower(res[i]);
			res += c;
			check = (c.size() > 1 && isupper(c[0])) ? c.size() - 1 : 0;
		}
	}
	return res;
}
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674407
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная транслитерация.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]