Как заменить каждый символ в строке на предыдущий символ в алфавите - PullRequest
0 голосов
/ 17 июня 2019

Я ищу способ изменить каждый символ в строке на предыдущее значение в алфавите. По сути, мне нужно создать для каждого цикла, который будет принимать каждый символ в строке и увеличивать его назад на 1. Например, я хотел бы изменить bcd234% на abc123 $.

Я попытался разбить строку на массив и вычесть 1 из каждого элемента.

$myString = "bcd234%"
$myArray = $myString.ToCharArray()
$myArray = $myArray | ForEach-Object { $_ - 1 }
$myArray
-join($myArray)

Я ожидал бы, что он будет повторять значение на 1, а затем соединять все новые значения вместе.

Я хотел бы видеть новую строку: абв123 $

Что он на самом деле делает, так это создает новые значения для каждого из персонажей и вместо этого соединяет их вместе.

Результаты, которые я получаю, - это новый массив: 97 98 99 49 50 51 36

А потом он соединяет их вместе, что выглядит как: 97989949505136

1 Ответ

0 голосов
/ 18 июня 2019

Когда вы вычитаете целое число из символа, PowerShell автоматически преобразует символ в целое число для вычисления.По сути $_ - 1 делает то же самое, что и ([int]$_) - 1.Для возврата персонажа вы можете просто привести результат операции обратно к символу.

$myArray = $myArray | ForEach-Object { [char]([int]$_ - 1) }

[int] является избыточным, как упомянуто выше, но я вставил его для хорошей меры, так что этоБолее очевидно, что там происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...