2017-12-15 30 views
0
#include<iostream> 
#include<string> 
#include<array> 
#include<locale> 
using namespace std; 
class endeMachine 
{ 
public: 
    int findIndex(char letter) 
    { 
     int index = 0; 
     while (letter != alphabet[index]) 
     { 
      index++; 
    }//end while letter test 
    return index; 
    }//findIndex 
    string subEncrypt(string clear) 
    { 
     string subString = clear; 
     for (int i = 0; i < clear.length(); i++) 
     { 
      subString[i] = substitution[findIndex(clear[i])]; 
     }//end for 
     return subString; 
    }//subEncrypt 
    string transEncrypt(string clear) 
    { 
     string subString = clear; 
     for (int i = 0; i < clear.length(); i++) 
     { 
      subString[i] = alphabet[findIndex(clear[i]) + offset]; 
     }//end for 
     return subString; 
    }//transEncrypt 
private://--------------------------------------------------------- 
    array<char, 26> alphabet = { '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' }; 
    array<char, 26> substitution = { 'm','l','k','j','i','h','g','f','e','d','c','b','a','z','y','x','w','v','u','t','s','r','q','p','o','n' }; 
    int offset = 3; 
};//end endoMachine 
int main() 
{ 
    endeMachine text; 
    string clear_text = { "Hello" }; 
    cout << text.subEncrypt(clear_text) << endl; 
    cout << text.transEncrypt(clear_text) << endl; 
    cin >> clear_text; 
}//end main 

어디서 할 수 있습니다대문자와 소문자 문자열 암호화 및 암호 해독, 기본 암호 C++ 나는 결국 지점에 도착하려고이 프로그램에 따라서

  • 암호화 최종 사용자가 입력 한 문자열
  • 암호화를위한 대체 또는 변환 방법 중에서 선택하십시오.
  • 이전에 암호화 된 항목을 암호 해독
  • 암호화 방법 중 하나를 선택하십시오.
  • 그러므로 모든 가능한 결과를 생성, 암호화의 방법을 모른 채 암호화 된 문자열을 해독

내 문제는 다음과 같습니다

입력 문자열이 대문자를 포함, 전체 프로그램의 종료를 다운. 내가 좋아하는 라인 (12)에 뭔가 할 그러나 경우 :

while (tolower(letter) != alphabet[index]) 

암호화 방법 모두 작업을하지만 결과에 "Hello"의 입력을, 원래 입력 단어의 엄격 소문자 버전을 반환 :

fibby 
knoor 
보다는 출력시

는 :

Fibby 
Knoor 

이 어떤 식 으로든, 내가 개별적으로 단어의 각 문자의 대소 문자를 확인해야하는, 그래서 때 아웃 시간을 제공한다는 것을 의미 put을 사용하면 암호화 된 문자열의 해당 문자를 대문자로 변환하여 화면에 출력 할 수 있습니다.

제발 도와주세요!

+0

들여 쓰기 –

+0

먼저 분류하세요된다 죄송합니다. 서식을 수정했습니다. 희망을 갖고 지금 나는 도움을받을 수 있습니다. @EdHeal – Clanton

+0

귀하의 알파벳 대체 키 (귀하의 코드에서)는 소문자를 고려하는 것 같습니다 ... – Grantly

답변

0

대문자로 된 대문자가 전달되면 findIndex 함수가 실패합니다.

이유는 아래의 일정한 배열을 사용하는 것입니다 : 그래서 대문자 문자에 일치하는 항목을 찾을 수 없습니다

array<char, 26> alphabet = { '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' }; 
array<char, 26> substitution = { 'm','l','k','j','i','h','g','f','e','d','c','b','a','z','y','x','w','v','u','t','s','r','q','p','o','n' }; 

하고 while 루프는 아웃 오브 바운드 될 것입니다 반환 색인 값을 의미합니다 .. .. 귀하의 배열 크기보다 1입니다.

당신은 할 수 있습니다 : 문자가 대문자는 대문자 경우

  • 정상 같은 기능을 통해 사건을
  • 과정을 낮추기 위해
  • 변환 인 경우

    • 확인 후 암호화 된 문자를 설정 대문자로

    ... 암호 해독을 위해 역순으로 반복합니다.

    char가 대문자인지 확인하는 추악하고 우아한 방법이 있습니다.

    미운 : 소문자와 original..Are와 비교

    변환 그들은 같은? 그렇지 않은 경우 원본은 대문자입니다. 이것은 아마도 비슷한 언어에서 더 이식성이 있습니다. tolower 기능 here.

    우아한 :이 범위의 문자 값을 확인 할 수 사이 등 65 (90)

    숯 값 (일반 영어) 대문자는

  • +0

    그게 내가 붙어있는 부분이야. 나는 그것이 대문자라면 깃발을 긋는 방법을 알아낼 수 없다. – Clanton

    +0

    보조 답변을 편집했습니다. – Grantly

    +0

    충분합니다. 이 프로젝트에서 더 적은 것을 해결하고 사용자가 암호화하기 전에 입력 된 모든 단어를 소문자로 변환한다는 메시지를 적어 두십시오. 따라서, 두통을 저장. – Clanton