2014-10-02 6 views
-2

저는 학교 프로젝트에서 일하고 있습니다, 제 프로젝트는 Caesar Algorithm과 작동하는 Cypher and Decypher 프로그램입니다.Caesar Crypher/Decypher Program. C++

  • 이 프로그램은 사용자에게 다시 시작할 수있는 옵션을 제공합니다

    내 프로그램은 다음과 같은 특징을 가지고있다. (완료)

  • 사용자가 잘못된 내용을 입력하면 프로그램에서 사용자에게 다시 입력하도록 요청해야합니다. (버그 발생시)
  • 사용자는 글자와 공백 만 입력 할 수 있습니다. (공간을 추가하기 만하면됩니다.)
  • 편지는 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; 
} 

나는 기꺼이 그들도 읽을 수 있습니다 : 거의 내 인생 내가 여기 살고했기 때문에 내 영어가 완벽하지 않습니다 어떤 맞춤법 오류에 대한

그리고 죄송합니다 ...

+0

도움말 파일을 검토하는 것이 좋습니다. 특히, [좋은 질문을하는 법] (http://stackoverflow.com/help/how-to-ask), [주제에 관한 것] (http://stackoverflow.com/help/on-topic) , [피할 것] (http://stackoverflow.com/help/dont-ask)을 참조하십시오. –

+0

글자를 비교할 때'std :: toupper' 또는'std :: tolower'를 사용하십시오. 따라서 대문자 또는 소문자 값만 비교하면됩니다. –

+0

'' "<< endl"을'endl'로 바꿉니다. 공백 문자를 뒤따라 개행 할 이유가 없기 때문입니다. –

답변

1

정말 긴 프로그램을 휴지통으로 만들기는 싫지만 귀찮았습니다.

이 시도 : 내 애완 동물 짜증나게의

// 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 문을 사용 할 수 있습니다. 적은 타이핑, 적은 회선, 결함 삽입 확률 감소.