2017-12-15 2 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 

Also in diesem Programm, das ich schließlich bin versucht, auf den Punkt zu kommen, wo sie kann:Groß- und Klein String-Verschlüsselung und Entschlüsselung, Grund Chiffre C++

  • Verschlüsseln einer Zeichenfolge durch den Endbenutzer eingegeben
  • wählen zwischen einer Substitution oder Umsetzungsverfahren für die Verschlüsselung
  • die Zeichenfolge Entschlüsseln vorher verschlüsselter post-Eintrag
  • zwischen beiden eine der Verschlüsselungsmethoden wählen zu tun, so
  • den verschlüsselten String entschlüsseln, ohne die Methode der Verschlüsselung zu wissen, also alle möglichen Ergebnisse

Mein Problem ist, zu erzeugen:

Wenn die Eingabezeichenfolge enthält einen Großbuchstaben, das ganze Programm Abschaltungen. Allerdings, wenn ich etwas in Zeile 12 wie:

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

die Verschlüsselungsmethoden arbeiten beide, aber die streng Kleine Version des ursprünglich Eingangswortes zurückgeben, die Eingabe von „Hallo“ Ergebnis mache in:

fibby 
knoor 

bei der Ausgabe statt:

Fibby 
Knoor 

das bedeutet, dass in irgendeiner Weise, ich brauche individuell für die Aktivierung der einzelnen Buchstaben im Wort zu überprüfen, so dass, wenn es darum geht, Zeit für out put kann der entsprechende Buchstabe der verschlüsselten Zeichenkette groß geschrieben werden, bevor er auf den Bildschirm ausgegeben wird.

BITTE HELFEN !!!

+0

Bitte klären, um den Einzug –

+0

Erste Zeit damit, sorry. Ich habe die Formatierung korrigiert. Hoffentlich kann ich jetzt Hilfe bekommen. @EdHeal – Clanton

+0

Ihre Alphabet-Ersatzschlüssel (in Ihrem Code) scheinen nur Kleinbuchstaben zu berücksichtigen ... – Grantly

Antwort

0

Ihre findIndex-Funktion schlägt fehl, wenn ein UPPER-Fallzeichen übergeben wird.

Der Grund dafür ist es, die konstante Arrays unten verwendet:

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' }; 

So wird es keine Übereinstimmung für einen Großbuchstaben und Ihre while-Schleife bedeutet, dass Ihr Index-Wert findet zurückgegeben wird außerhalb der Grenzen sein .. ..Das ist 1 mehr als Ihre Array-Größe.

Sie können:

  • Überprüfen Sie, ob char obere Fall ist
  • Bekehrtfall
  • Prozess über Ihre Funktionen als normale
  • zu senken, wenn es in Großbuchstaben, dann Ihre verschlüsselten Zeichen gesetzt in Großbuchstaben

... Und für die Entschlüsselung in umgekehrter Reihenfolge, denke ich.

Es gibt hässliche und elegante Möglichkeiten, um zu prüfen, ob ein ...

Hässliche:

Bekehrtfall zu senken und vergleichen mit original..Are sie gleich? Wenn nicht, ist Original groß geschrieben. Dies ist wahrscheinlich portabler über ähnliche Sprachen. Tolower-Funktion here.

Elegant:

Der char-Wert (für normales Englisch) Großbuchstaben zwischen und einschließlich 65 und 90. Sie für den char-Wert in diesem Bereich überprüfen konnten

+0

Das ist der Teil an dem ich festhalte. Ich kann anscheinend nicht herausfinden, wie man kennzeichnet, wenn es Großbuchstaben war. – Clanton

+0

Bearbeitete meine Antwort zu unterstützen – Grantly

+0

Fair genug. Ich möchte mich vielleicht mit weniger zufrieden geben und auf die Aufforderung des Benutzers hinweisen, dass alle Wörter in Kleinbuchstaben konvertiert werden, bevor sie verschlüsselt werden. So sparen Sie Kopfschmerzen. – Clanton

Verwandte Themen