【发布时间】:2017-02-18 19:42:32
【问题描述】:
编辑:这被称为凯撒密码。 我试图制作一个主要目的是加密给定(短小写)字符串的程序。它将通过将所有字母 n 空格向右(加密)或向左(解码)移动来实现。
这是我目前所写的(已编辑)
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
char abc[26] = {'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'};
void code(int n) {
string cadena;
cout << "Introduzca la cadena a cifrar : " << '\n';
cin >> cadena;
for (int i(0); i < cadena.length; i++) {
for (int f(0); f < strlen(abc); f++) {
if (cadena[i] == abc[f]) {
int w;
w = f + n;
if (w > strlen(abc)) {
w -= strlen(abc);
}
cadena[i] = abc[w];
}
}
}
cout << cadena << '\n';
system("pause");
}
void decode(int n) {
string cadena;
cout << "Introduzca la cadena a cifrar : " << '\n';
cin >> cadena;
for (int i(0); i < cadena.length; i++) {
for (int f(0); f < strlen(abc); f++) {
if (cadena[i] == abc[f]) {
int w;
w = f - n;
if (w < 0) {
w--;
w = strlen(abc) - w;
}
cadena[i] = abc[w];
}
}
}
cout << cadena << '\n';
system("pause");
}
int main() {
int n;
cout << "Introduzca el numero del cesar " << '\n';
cin >> n;
cout << "Desea usted cifrar o descifrar?" << '\n';
cout << "Introduzca c para cifrar o d para descifrar" << '\n';
char chos;
cin >> chos;
if (chos == 'c')
code(n);
else
decode(n);
return 0;
}
现在的问题是我得到了一个糟糕的字符串,我什至不知道它是如何形成的。还有一个错误。
【问题讨论】:
-
如果您不需要使用 char 数组,请考虑使用
std::string和std::rotate。 -
sizeof(cadena)为 1。i <= sizeof(cadena);将运行 2 次迭代。f <= 26将运行 27 次迭代 -
看起来您正在尝试创建Caesar cipher。你能确认你的最终目标是什么吗?我认为您不必旋转任何东西。
-
大概您希望
cadena的类型为std::string而不是char,对吧? -
另外,一旦你将
cadena设为std::string,你希望你的外循环类似于for (std::size_t i = 0; i < cadena.size(); ++i)。
标签: c++ arrays string pointers string.h