【问题标题】:Comparing, Replacing, Matching Arrays C++比较、替换、匹配数组 C++
【发布时间】:2017-02-25 23:54:50
【问题描述】:

我目前正试图破译一个交给我的文本文件。我要使用一个数组 ex: where alphabet_size = 26

char code[ALPHABET_SIZE] = {'i','z','t', 'o', 'h', 'n', 'd', 'b', 'e', 'q', 'r', 'k', 'g', 'l', 'm', 'a', 'c', 's', 'v', 'w'
    , 'f', 'u', 'y', 'p', 'j', 'x',}

使用包含此内容的另一个字符数组文件破译

ifqkwxcadf ar cei fpoi masif cd cei xkdqirr du pxxnwafm pf pnmdkaceo cd p oirrpmi, teaqe rqkpohnir cei gpcp af ac-oplafm ac sikw gauuaqvnc pfg caoi qdfrvoafm, au fdc xkpqcaqpnnw aoxdrrahni, cd gigvqi cei dkamafpn masif dfnw cei ifqdgig gpcp. afxvcr cd cei pnmdkaceo cwxaqpnnw afsdnsi pggacadfpn riqkic gpcp qpnnig liwr, teaqe xkisifcr cei oirrpmi ukdo hiafm giqdgig-isif au cei pnmdkaceo ar xvhnaqnw lfdtf.

我尝试的是(不使用字符代码数组,而是使用 if 语句来检查加密的消息[0] = 'a' then message[0] = 'i'

    for (int num = 0; message[num] != '\0'; num++)
    {
        if (message[num] == 'a') { message[num] = 'i'; }
        if (message[num] == 'b') { message[num] = 'z'; }
        if (message[num] == 'c') { message[num] = 't'; }
        if (message[num] == 'd') { message[num] = 'o'; }
        if (message[num] == 'e') { message[num] = 'h'; }

但最后收到了另一个奇怪的消息

elcujpjeml eu jbe lame geuel jm jbe pumceuu mf appljelg al algmuejbm jm a meuuage, jbecb ucuambleu jbe daja el ej-makelg ej ueuj deffeculj ald jeme cmluumelg, ef lmj puacjecallj empmuueble, jm deduce jbe muegelal geuel mllj jbe elcmded daja. elpuju jm jbe algmuejbm jjpecallj elumlue addejemlal uecuej daja called keju, jbecb pueuelju jbe meuuage fumm beelg decmded-euel ef jbe algmuejbm eu publeclj klmjl.

等等等等..(这意味着输入文本中的每个“a”都应该替换为“i”,每个“b”都应该替换为“z”等等。)(消息包含加密文本我在那里出现的文件) 现在,我的问题是如何使用“字符代码数组”来加密“消息数组”基本上不确定这是否是正确的术语但匹配和替换?任何帮助都会很棒!提前谢谢你。

【问题讨论】:

  • 可能不是完整的答案,但至少将它们转换为else ifs 或在每个块中放置一个continue,否则如果字母是“a”,它会更改为“i”并且然后在移动到下一个索引之前将“i”更改为等等。调试器应该向您展示这一点。但除此之外,肯定还有更好的方法。

标签: c++ arrays string


【解决方案1】:

通过code 数组使用索引。

for (int num = 0; message[num] != '\0'; num++)
    if(isalpha(message[num]))
        message[num] = code[message[num]-'a'];

ps:#include <ctype.h> 用于 isalpha 函数。在这里使用它是因为您只想替换 字母 字符(并且您只使用小写字母)。

正如上面的评论,您的错误是您多次替换某些字符,因为您没有使用else if

最后,这是你解密后的明文:

加密是对消息应用算法的过程的名称,它对消息中的数据进行打乱 - 使得仅在给定编码数据的情况下推断原始数据非常困难和耗时,如果不是实际上不可能的话。算法的输入通常涉及称为密钥的额外秘密数据,这会阻止消息被解码——即使该算法是公开的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 2018-04-18
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多