用c++编程:加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。算法:明文中的字母转换成其后的第4个字母,例如:A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。例如:China转换成密文为Glmre。要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。
时间: 2023-04-09 17:03:29 浏览: 272
我可以回答这个问题。以下是加密程序的代码:
#include <stdio.h>
#include <ctype.h>
void change(char *s) {
while (*s) {
if (isalpha(*s)) {
*s = (*s - 'A' + 4) % 26 + 'A';
}
s++;
}
}
void insert(char *s) {
while (*s) {
putchar(*s);
if (*(s+1)) {
putchar(' ');
}
s++;
}
}
int main() {
char str[100];
printf("请输入明文:");
fgets(str, 100, stdin);
change(str);
insert(str);
return 0;
}
这个程序中,change函数用来将明文中的字母转换成密文,insert函数用来在密文中插入空格。在主函数中,先从键盘输入明文,然后调用change和insert函数进行加密和输出。指针被用来传递字符串参数。
相关问题
加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。 算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e),Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。例如,China转换成密文为G l m r e。要求:在函数change中完成字母转换,在函数insert中完成增加空格,用指针传递参数。C++
下面是一个实现该加密程序的C++代码:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
void change(char* str) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (isalpha(str[i])) {
str[i] = (str[i] - 'A' + 4) % 26 + 'A';
}
}
}
void insert(char* str) {
int len = strlen(str);
for (int i = 1; i < len; i += 2) {
for (int j = len; j > i; j--) {
str[j] = str[j - 1];
}
str[i] = ' ';
len++;
}
}
int main() {
char str[100];
cout << "请输入明文:";
cin.getline(str, 100);
change(str);
insert(str);
cout << "密文为:" << str << endl;
return 0;
}
```
首先在函数`change`中遍历字符串,对于每个字母,将其转换为后面的第4个字母。使用`isalpha`函数判断是否为字母,使用ASCII码进行加减运算。
然后在函数`insert`中遍历字符串,每两个字符之间插入一个空格。为了避免覆盖原有字符,从后往前遍历并移动字符。
在`main`函数中,先读入明文,然后调用`change`和`insert`函数进行加密,最后输出密文。
使用c++编程 任务描述 本关任务:编写一个程序,实现对凯撒加密算法的破解,输入恺撒加密的密文,输出破解后的明文(也是大写字母构成) 例如:明文是"Attack in the morning",密钥k等于3,则密文是"DWWDFN LQ WKH
好的,这里是一个 C++ 的实现:
```c++
#include <iostream>
#include <string>
using namespace std;
int main() {
string ciphertext; // 定义密文字符串
int k; // 定义密钥
getline(cin, ciphertext); // 获取密文
cin >> k; // 获取密钥
string plaintext; // 定义明文字符串
for (char c : ciphertext) {
if (isalpha(c)) { // 判断是否为字母
// 将字母向前移动 k 位,注意回卷到字母表开头
plaintext += static_cast<char>((c - 'A' - k + 26) % 26 + 'A');
} else {
plaintext += c; // 非字母直接拼接到明文字符串中
}
}
cout << plaintext << endl; // 输出解密后的明文
return 0;
}
```
这个程序和前面的 Python 版本类似,首先获取输入的密文和密钥,然后遍历密文中的每个字符。如果是字母,就将其向前移动 k 位,注意回卷到字母表开头。最后将解密后的明文字符串输出即可。需要注意的是,C++ 中字符类型的加减运算会自动将字符转换为其 ASCII 码,因此需要使用显式类型转换将结果转换回字符类型。
阅读全文