Условие
Часто происходит так, что пользователи, вводя текст на некотором языке, забывают переключить раскладку клавиатуры на этот язык. Если при этом пользователь не владеет методом слепой печати, он может обнаружить свою ошибку, уже набрав немалое количество текста. Чтобы избавить пользователя от необходимости перепечатывать весь текст в нужной раскладке, можно написать программу, которая сделает это за него.
Входные данные
На вход подается некоторая строка текста, который нужно изменить.
Выходные данные
Вывести исходную строку текста, «перепечатанную» в другой раскладке.
Примечание: Данная программа работает с русской и английской раскладкой клавиатуры. Весь текст, в какой бы из этих расскладок не был введен, перепечатывается в другой раскладке: русский — в английский, английский — в русский.
Тесты :
Ввод | Вывод |
Руддщб цщкдв! | Hello, world! |
Ghbdtn? vbh! | Привет, мир! |
Шэь пдфв ещ ыуу нщг | I’m glad to see you |
Rfr ltkf& | Как дела? |
ащк (ште ш = 0ж ш Б тж ш++) | for (int i = 0; i < n; i++) |
Код на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) { String eng = "qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,@#$^&\"№;:?"; String rus = "йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?\"№;:?@#$^&"; Scanner scan = new Scanner(System.in); String word = new String(); word = scan.nextLine(); StringBuffer word1 = new StringBuffer(); for (int i = 0; i < word.length(); i++) { int k = rus.indexOf(word.charAt(i)); if (k != -1) { word1.append(eng.charAt(k)); } else { word1.append(word.charAt(i)); } } word = word1.toString(); System.out.print(word); } } |
Алгоритм:
В памяти хранятся строки соответствия. Каждому символу одной строки соответствует символ другой строки на той же позиции, но соответствующий символ — из другой раскладки.
7 8 |
String eng = "qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,@#$^&\"№;:?"; String rus = "йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?\"№;:?@#$^&"; |
Вводим строку, которую требуется заменить. Измененный вариант будет записываться в другой, временной строке.
10 11 12 |
String word = new String(); word = scan.nextLine(); StringBuffer word1 = new StringBuffer(); |
Далее проходим по всей введенной строке. Если некоторый текущий символ можно заменить, записываем измененный символ. Если нет, то записываем исходный.
13 14 15 16 17 18 19 20 |
for (int i = 0; i < word.length(); i++) { int k = rus.indexOf(word.charAt(i)); if (k != -1) { word1.append(eng.charAt(k)); } else { word1.append(word.charAt(i)); } } |
А в конце переписываем исходную строку и выводим ее:
21 22 |
word = word1.toString(); System.out.print(word); |
Ссылки:
Рабочий код для тестирования на Ideone.com: Ideone.com