水平输出包含空格的转换文本(凯撒密码)
Posted
技术标签:
【中文标题】水平输出包含空格的转换文本(凯撒密码)【英文标题】:Output converted text horizontally including spaces (caesar cipher) 【发布时间】:2021-12-31 05:34:39 【问题描述】:[xml]$xml = Get-Content -Path phrase.xml
$offset = $xml.assignment.caesar_cipher.offset
$cipher = $xml.assignment.caesar_cipher.cipher
$translation = [ordered]@
$alpha = @('A','B','C','D','E','F','G','H','I','J','K','L','M',`
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z')
For ($i=0; $i -lt 26; $i++)
$translation[$alpha[((((-$i + $offset) % 26) + 26) % 26)]] = $alpha[$i]
$cipher_int = $cipher.ToCharArray() | %$translation["$_"]
$deciphered = [string[]]$cipher_int
$deciphered
-join [array]$deciphered
我得到了要翻译的短语,但是,$deciphered 将其垂直输出,每个字母在新行上,当我执行 -join [array] 时,它在 1 行上水平输出整个短语,但它消除了之间的空格词所以这是一个长词。 我试图在一行上输出短语,但也保留空格。
例句都乱七八糟了:The quick brown fox jumps over the lazy dog
$deciphered =
T
h
e
...
[array]$deciphered = Thequickbrownfoxjumpsoverthelazydog
【问题讨论】:
我在您的脚本中没有看到任何处理空格的内容。如果我没记错的话,我需要处理 3 个可能的不同 ASCII 空白字符,但请检查从 xml 输入的空格的字符代码。由于我看不到原始变量中的内容,因此我无法提出确切的解决方案。但我不认为你得到空间是因为它们在转换本身中丢失了。我建议逐步检查并监控空间的处理方式,它们在哪一行丢失应该很明显。 没有 XML 就不可能提出答案。 【参考方案1】:您的translation
哈希表没有空格条目。
[xml]$xml = Get-Content -Path phrase.xml
$offset = $xml.assignment.caesar_cipher.offset
$cipher = $xml.assignment.caesar_cipher.cipher
$translation = [ordered]@
$upperCase = @('A'..'Z')
$lowerCase = @('a'..'z')
For ($i=0; $i -lt 26; $i++)
$translation[[char]$upperCase[((((-$i + $offset) % 26) + 26) % 26)]] = [char]$upperCase[$i]
$translation[[char]$lowerCase[((((-$i + $offset) % 26) + 26) % 26)]] = [char]$lowerCase[$i]
$translation[[char]' '] = [char]' '
$deciphered = -join $translation[$cipher.ToCharArray()]
编辑
范围运算符 (..
) 仅在 PowerShell 6 及更高版本中支持字符。
【讨论】:
'A'..'Z'
仅适用于 PS Core,您应该澄清这一点。 65..90 | ForEach-Object [char]$_
适用于 Windows Powerhsell。
谢谢@SantiagoSquarzon,我不知道。以上是关于水平输出包含空格的转换文本(凯撒密码)的主要内容,如果未能解决你的问题,请参考以下文章