gpt4 book ai didi

C++ Caesar 加密项目 (ASCII)

转载 作者:行者123 更新时间:2023-11-28 06:16:33 25 4
gpt4 key购买 nike

对于类(class),我必须用 C++ 开发一个凯撒加密项目,它接收一个字符串,并将所有 ascii 代码移动一个随机整数。我的项目运行完美,代码如下:

#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>

using namespace std;
int main(int argc, const char * argv[]) {

string sentence = "";
int shifter, counter = 0, position = 0;
srand(time(NULL));
shifter = (rand() % 25) + 1;
cout << "Enter a sentence, and this program will encrypt it: " << endl;
getline(cin, sentence);
cout << "\n\n\n";
for (int i = 0; i < sentence.length(); i++) {
sentence[i] = sentence[i] + shifter;
cout << sentence[i];
}

return 0;
}

我唯一的问题是我的老师希望将它们改为仅字母。如果字母是“z”并且移位是“2”,她希望输出是“b”。我不确定这将如何完成。

是否有可能解决此问题的简单程序?如果是这样,将如何完成?

最佳答案

第一步是要意识到字母需要映射到数字,以某种方式旋转,然后再映射回字母。

@vsoftco 已经尝试通过他的评论让您走上正轨,因此请仔细阅读它们,因为他给了您很好的提示。

我将尝试填补@vsoftco 遗漏的一些空白。

下面是将字母映射到数字的方法:

char letter = 'B';
int number = letter - 'A';

字母只是计算机知道用字母表示的数字。事实上字母'B'在ASCII中是66 .所以如果我们在 C 中这样做:

char letter = 'B';
int number = 100 - 'B'; // <- this is equal to 100 - 66 which is 34

number 变为 34。

这很好,但我们希望我们的数字在 0 到 25 之间(以便很容易应用模运算)。

想一想。如果将 5 加到 0 到 25 之间的未知数,如何确保结果小于 26?使用模数,它会为您包装操作。

但回到将字母转换为数字。要将任何大写字母(请注意小写字母有不同的数字)转换为 0 到 25 之间的数字,您可以像这样减去“A”:

char letter = 'C';
int number = letter - 'A'; // <- this is 'C' - 'A' = 67 - 65 = 2 ( which is the 3rd number if we start counting from zero )

要从数字转换回字母,只需添加“A”即可。

int number = 5; // This is the 6th letter since we start counting from zero
char letter = 'A' + number; // Now letter is 'A' + 5 = 65 + 5 = 70 which is 'F'...

通过这种转换和评论中描述的模运算@vsoftco,您应该能够自己制作凯撒算法。

关于C++ Caesar 加密项目 (ASCII),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30178057/

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