凯撒密码器/密码器程序.C++

Caesar Crypher/Decypher Program. C++

本文关键字:密码 C++ 程序 凯撒      更新时间:2023-10-16

我正在做一个学校项目,我的项目是一个使用凯撒算法的Cypher和Decypher程序。

我的程序必须具有以下特点:

  • 程序必须为用户提供再次启动的选项。(完成。)
  • 如果用户输入了错误的内容,程序必须要求用户再次输入。(完成时出现错误。)
  • 用户只能输入字母和-por空格。(我只需要添加空格。)
  • 字母必须移动5个位置(即A=F)(完成)
  • 该程序必须考虑大写字母。(完成。)
  • 每次输入字母时,屏幕都必须清除。(完成。)
  • 在程序结束时,您必须能够看到加密或解密的文本。(需要完成。)

我需要知道的是如何让程序向我显示加密文本,计算程序运行期间我迄今为止所做的所有输入。

另外一件事是,我如何输入一个完整的文本句子并应用凯撒加密,显然我必须更改几乎所有的代码,但我想知道如何做到这一点。

这是我到目前为止的代码,如果句子是西班牙语的,很抱歉,但我现在住在墨西哥,我的课是西班牙语的。如果你需要我翻译文本,我很乐意为你翻译。

#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main(int, char**) {
    // Variables.
    char l;
    int x = 0;
    char y = x + l;
    bool volverainiciar;
    volverainiciar = 1;
    while (volverainiciar == 1) {
        cout << "Favor de introducir la letra del mensaje que desea codificar."
             << endl;
        cin >> l;
        cout << " " << endl;
        cout << " " << endl;
        if ((l >= 'a' && l <= 'u') || (l >= 'A' && l <= 'U')) {
            cout << "El mensaje a codificar es: " << l;
            cout << " " << endl;
            cout << " " << endl;
            cout << "La letra " << l << " tiene un codigo ASCII de: " << x + l
                 << endl;
            y = (l + 5);
            cout << "La letra " << l << " encriptado tiene un valor de: " << y
                 << endl;
            cout << " " << endl;
            cout << " " << endl;
            cout << "Se limpiara la pantalla..." << endl;
            system("pause");
            system("cls");
            cout << "           Desea volver a iniciar?" << endl;
            cout << " " << endl;
            cout << "       Para volver a iniciar (1) , para no volver a "
                    "iniciar (0)" << endl;
            cout << " " << endl;
            cout << "Volver a iniciar: ";
            cin >> volverainiciar;
            cout << " " << endl;
            cout << " " << endl;
        } else if ((l >= 'v' && l <= 'z') || (l >= 'V' && l <= 'Z')) {
            switch (l) {
                case 'v':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: a" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'w':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: b" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'x':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: c" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'y':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: d" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'z':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: e" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'V':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: A" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'W':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: B" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'X':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: C" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'Y':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: D" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
                case 'Z':
                    cout << "El mensaje a codificar es: " << l;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "La letra u tiene un codigo ASCII de: " << x + l
                         << endl;
                    cout << "La letra " << l
                         << " encriptado tiene un valor de: E" << endl;
                    cout << " " << endl;
                    cout << " " << endl;
                    cout << "Se limpiara la pantalla..." << endl;
                    system("pause");
                    system("cls");
                    cout << "           Desea volver a iniciar?" << endl;
                    cout << " " << endl;
                    cout << "       Para volver a iniciar (1) , para no volver "
                            "a iniciar (0)" << endl;
                    cout << " " << endl;
                    cout << "Volver a iniciar: ";
                    cin >> volverainiciar;
                    cout << " " << endl;
                    cout << " " << endl;
                    break;
            }
        } else {
            cout << "Ese simbolo no es valido, favor de introducir uno valido."
                 << endl;
            cin >> l;
            cout << " " << endl;
            cout << " " << endl;
            continue;
        }
    }
    cout << "Gracias por usar el encriptador/desencriptador." << endl;
    exit;
    return 0;
}

如果你有任何建议,我也很乐意阅读:)

很抱歉有拼写错误,我的英语并不完美,因为我几乎一辈子都住在这里。。。

我不想破坏你非常长的程序,但它很烦人。

试试这个:

// Given the input character is in x.
if (std::isalpha(x))
{
  if (std::islower(x))
  {
    y = (x - 'a'); // Convert to a number.
    y = y + 5;     // Left shift by 5
    y = y % 26;    // Modulo arithmetic for all letters in alphabet
    y = y + 'a';   // Convert back to character.
  }
  else
  {
    y = (x - 'A'); // Convert to a number.
    y = y + 5;     // Left shift by 5
    y = y % 26;    // Modulo arithmetic for all letters in alphabet
    y = y + 'A';   // Convert back to character.
  }
}

我最讨厌的事情之一就是重复代码。尽管上面有重复的代码,但我已经减少了代码中的重复量。请随意在上面的代码中添加所有cout语句。

顺便说一句,如果数据不使用变量,您可以将数据"块写"到cout。示例:

  static const char answer_text[] =
  "n"
  "n"
  "La letra u tiene un codigo ASCII de: ";
  //...
  cout.write(answer_text, sizeof(answer_text) - 1);

这将允许您在需要使用相同文本的任何地方使用cout.write语句。更少的打字,更少的行,注入缺陷的可能性更小。