Как понять упражнение с обратным именем в C #? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь понять, как этот фрагмент кода выполняется шаг за шагом, чтобы лучше понять его. Вы вводите слово в консоль, и оно выплевывает слово в обратном порядке.

Я могу следовать коду, пока не доберусь до array[name.Length - i] = name[i - 1];

var array = new char[name.Length];
for (var i = name.Length; i > 0; i--)
    array[name.Length - i] = name[i - 1];     <------

Я не понимаю, как переводятся шаги этой одной строки кода. Почему мы вычитаем 1 из name.Length, а затем вычитаем его сам, представленный i? Что делает вычитание 1 из i в name[i - 1]?

1 Ответ

0 голосов
/ 01 мая 2018

Цикл начинается с i, равного длине name, и вычитает 1 из i в каждой итерации.

Таким образом, в первой итерации name.Length - i равно 0, а i-1 равно name.Length -1.
На следующей итерации name.Length - i равно 1, а i-1 равно name.Length -2 и т. Д.

Присваивая символ в name[x] значению array[y], цикл копирует каждый символ из массива name в массив array - поэтому к моменту окончания цикла массив array становится точно обратная копия массива name.

Я собрал небольшую демонстрацию на rextester , чтобы вы могли видеть, как она работает.

Обратите внимание, что это не лучший способ перевернуть строку, особенно на неанглийском языке. Некоторые языки используют буквы, состоящие из более чем одного символа, например, акценты на французском языке, которые используют Ç, é, â, ê, î, ô, û, à, è, ù, ë, ï and ü.

Для этих языков простое изменение символа на символ приведет к появлению строки, в которой ударение находится на неправильной букве. Чтобы найти правильную обратную строку, прочтите ответ Р. Мартиньо Фернандеса на этого SO сообщения .

...