gpt4 book ai didi

c++ - 循环不处理字符串的最后一个字符

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:40 26 4
gpt4 key购买 nike

基本上,(Vigenere) 解密工作完美,只是不包括解密的最后一个字母。例如,m_text 的解密产生 48 个字母而不是 49 个。我什至试图操纵循环,但效果不佳,因为我将使用 .at() 获得超出范围的异常。任何帮助,将不胜感激!

using namespace std;
#include <string>
#include <iostream>


int main()

{
string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

string m_text = "ZOWDLTRTNENMGONMPAPXVUXADRIXUBJMWEWYDSYXUSYKRNLXU";

int length = m_text.length();

string key = "DA";

string plainText = "";

int shift = 0;

int shift2 = 0;



//Loop that decrypts
for (int k = 0; k < length-1; k+=2)
{
//Key 1 shift
shift = m_text.at(k) - key.at(0);
//Key 2 shift
shift2 = m_text.at(k+1) - key.at(1);

if (shift >= 0)
{
plainText += ALPHABET.at(shift);
}
else
{
shift += 91;
plainText += (char)shift;
}

if (shift2 >= 0)
{
plainText += ALPHABET.at(shift2);
}
else
{
shift2 += 91;
plainText += (char)shift2;
}
}
cout << plainText << endl;
}

最佳答案

从表面上看,您一次要解码两个字符。因此,当您的字符串中有 49 个字符时,还剩下一个(未处理)。如果您将 m_text 设为 48 个字符长,您会注意到您得到了正确的结果。

复制 key 以匹配消息的长度,然后逐个字符解码可能更容易。

关于c++ - 循环不处理字符串的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29324875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com