Morpheus_God
@Morpheus_God

Свитч раскладки клавиатуры с латиницы на русскую раскладку. Как?

Добрый день. Сейчас пробую написать мелкую софтину, которая из подобной каши букв на латинце "ghbdtn", переведет по клику на "Привет".
Понимаю, что можно через string replace каждую кнопку клавиатуры пропустить, но много кода. Нашел еще вот такое решение.
public static String Avtoconvert(string text)
        {
            string s="";
            for (int i = 0; i < text.Length; i++)
            {
                switch (text[i])
                {
                    case ('q'): s += "й"; break;
                    case ('w'): s += "ц"; break;
                    case ('e'): s += "у"; break;
                    case ('r'): s += "к"; break;
                    case ('t'): s += "е"; break;
                    case ('y'): s += "н"; break;
                    case ('u'): s += "г"; break;
                    case ('i'): s += "ш"; break;
                    case ('o'): s += "щ"; break;
                    case ('p'): s += "з"; break;
                    case ('['): s += "х"; break;
                    case (']'): s += "ъ"; break;
                    case ('a'): s += "ф"; break;
                    case ('s'): s += "ы"; break;
                    case ('d'): s += "в"; break;
                    case ('f'): s += "а"; break;
                    case ('g'): s += "п"; break;
                    case ('h'): s += "р"; break;
                    case ('j'): s += "о"; break;
                    case ('k'): s += "л"; break;
                    case ('l'): s += "д"; break;
                    case (';'): s += "ж"; break;
                    case ('\''): s += "э"; break;
                    case ('z'): s += "я"; break;
                    case ('x'): s += "ч"; break;
                    case ('c'): s += "с"; break;
                    case ('v'): s += "м"; break;
                    case ('b'): s += "и"; break;
                    case ('n'): s += "т"; break;
                    case ('m'): s += "ь"; break;
                    case (','): s += "б"; break;
                    case ('/'): s += "."; break;
                    case (' '): s += " "; break;
                    case ('`'): s += "ё"; break;
                    case ('\\'): s += "\\"; break;
                    case ('@'): s += "\""; break;
                    case ('#'): s += "№"; break;
                    case ('$'): s += ";"; break;
                    case ('^'): s += ":"; break;
                    case ('&'): s += "?"; break;
                    case ('|'): s += "/"; break;
                    case ('Q'): s += "Й"; break;
                    case ('W'): s += "Ц"; break;
                    case ('E'): s += "У"; break;
                    case ('R'): s += "К"; break;
                    case ('T'): s += "Е"; break;
                    case ('Y'): s += "Н"; break;
                    case ('U'): s += "Г"; break;
                    case ('I'): s += "Ш"; break;
                    case ('O'): s += "Щ"; break;
                    case ('P'): s += "З"; break;
                    case ('{'): s += "Х"; break;
                    case ('}'): s += "Ъ"; break;
                    case ('A'): s += "Ф"; break;
                    case ('S'): s += "Ы"; break;
                    case ('D'): s += "В"; break;
                    case ('F'): s += "А"; break;
                    case ('G'): s += "П"; break;
                    case ('H'): s += "Р"; break;
                    case ('J'): s += "О"; break;
                    case ('K'): s += "Л"; break;
                    case ('L'): s += "Д"; break;
                    case (':'): s += "Ж"; break;
                    case ('"'): s += "Э"; break;
                    case ('Z'): s += "Я"; break;
                    case ('X'): s += "Ч"; break;
                    case ('C'): s += "С"; break;
                    case ('V'): s += "М"; break;
                    case ('B'): s += "И"; break;
                    case ('N'): s += "Т"; break;
                    case ('M'): s += "Ь"; break;
                    case ('<'): s += "Б"; break;
                    case ('>'): s += "Ю"; break;
                    case ('й'): s += "q"; break;
                    case ('ц'): s += "w"; break;
                    case ('у'): s += "e"; break;
                    case ('к'): s += "r"; break;
                    case ('е'): s += "t"; break;
                    case ('н'): s += "y"; break;
                    case ('г'): s += "u"; break;
                    case ('ш'): s += "i"; break;
                    case ('щ'): s += "o"; break;
                    case ('з'): s += "p"; break;
                    case ('х'): s += "["; break;
                    case ('ъ'): s += "]"; break;
                    case ('ф'): s += "a"; break;
                    case ('ы'): s += "s"; break;
                    case ('в'): s += "d"; break;
                    case ('а'): s += "f"; break;
                    case ('п'): s += "g"; break;
                    case ('р'): s += "h"; break;
                    case ('о'): s += "j"; break;
                    case ('л'): s += "k"; break;
                    case ('д'): s += "l"; break;
                    case ('ж'): s += ";"; break;
                    case ('э'): s += "'"; break;
                    case ('я'): s += "z"; break;
                    case ('ч'): s += "x"; break;
                    case ('с'): s += "c"; break;
                    case ('м'): s += "v"; break;
                    case ('и'): s += "b"; break;
                    case ('т'): s += "n"; break;
                    case ('ь'): s += "m"; break;
                    case ('б'): s += ","; break;
                    case ('ю'): s += "."; break;
                    case ('.'): s += "."; break;
                    case ('ё'): s += "`"; break;
                    case ('№'): s += "#"; break;
                    case ('?'): s += ","; break;
                    case ('Й'): s += "Q"; break;
                    case ('Ц'): s += "W"; break;
                    case ('У'): s += "E"; break;
                    case ('К'): s += "R"; break;
                    case ('Е'): s += "T"; break;
                    case ('Н'): s += "Y"; break;
                    case ('Г'): s += "U"; break;
                    case ('Ш'): s += "I"; break;
                    case ('Щ'): s += "O"; break;
                    case ('З'): s += "P"; break;
                    case ('Х'): s += "{"; break;
                    case ('Ъ'): s += "}"; break;
                    case ('Ф'): s += "A"; break;
                    case ('Ы'): s += "S"; break;
                    case ('В'): s += "D"; break;
                    case ('А'): s += "F"; break;
                    case ('П'): s += "G"; break;
                    case ('Р'): s += "H"; break;
                    case ('О'): s += "J"; break;
                    case ('Л'): s += "K"; break;
                    case ('Д'): s += "L"; break;
                    case ('Ж'): s += ":"; break;
                    case ('Э'): s += "\""; break;
                    case ('Я'): s += "Z"; break;
                    case ('Ч'): s += "X"; break;
                    case ('С'): s += "C"; break;
                    case ('М'): s += "V"; break;
                    case ('И'): s += "B"; break;
                    case ('Т'): s += "N"; break;
                    case ('Ь'): s += "M"; break;
                    case ('Б'): s += "<"; break;
                    case ('Ю'): s += ">"; break;
                    default: s += text[i]; break;
                }
            }
            return s;
        }


Опять же целая портянка. Какие еще могут быть варианты решения такой задачи?
  • Вопрос задан
  • 563 просмотра
Решения вопроса 2
@S0HardCore
1. Добавлять/отнимать смещение до символов другого языка в кодировке.
Плюсы: намного меньше строк кода.
Минусы: придется делать костыли для спец. символов; искать начало и конец букв в кодировке.

2. Объявить словарь и заполнить его соответствиями символов в разных языках. В цикле сделать проход по словарю.
Плюсы: код функции будет меньше; с какой-то стороны так даже правильнее, чем огромный switch.
Минусы: все равно нужно объявлять каждую строку словаря.
Ответ написан
petermzg
@petermzg
Самый лучший программист
Каждый символ это число, в ANSI кодировке до 255, в Unicode - больше.
Поэтому создаете массив и в него с нужным смещением записываете ваши новые значения.
В итоге будет:
var ch = charArray[(short)text[i]];
Для Unicode чтобы не делать большой массив, можно предусмотреть сдвиг.
var index = (short)text[i];
var ch = charArray[index - offset];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы