水平输出包含空格的转换文本(凯撒密码)

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,我不知道。

以上是关于水平输出包含空格的转换文本(凯撒密码)的主要内容,如果未能解决你的问题,请参考以下文章

凯撒密码与空格字符保持不变

凯撒密码

jmu-python-凯撒密码加密算法,谢谢

加解密 Java 凯撒密码

7-30 jmu-python-凯撒密码加密算法 (10 分)

求密文(凯撒密码)