Обработка символов в строке при шифровании

Я пытаюсь понять, как я смогу внедрить этот шифр с автоключем, и думаю, что у меня большая его часть проработана. Шифр должен использовать систему стилей подключей, используя позиции символов в алфавите.

В настоящее время я застрял на том, как обрабатывать несколько символов «;:,.» когда они вводятся как часть строки шифрования или дешифрования и не уверены, как подойти к ней, поскольку я новичок в этом языке. Любое руководство или направление было бы замечательно. Ниже приведен код и пример того, как должен работать шифр.

Описание шифра:
введите описание изображения здесь

#include <iostream>
#include <string>
#include <assert.h>

using namespace std;

//Declares
char autokeyE(int, int);
char autokeyD(char);
char numToLetter(int);
int letterToNum(char);

int main()
{
//Declares
string inputText, finalText;
int firstAlpha = 0;
int key = 0;
int option = 0;//First Values
do
{
cout << "What operation would you like to do? Press '1' for Encrypt and '2' for Decrypt." << endl ;
cin >> option;

if (option == 1)
{
cout << "Please input your plain text to encrypt." << endl ;
cin >> inputText;
cout << "Please input your key to encrypt with." << endl;
cin >> key;

string finalText = "";

firstAlpha = letterToNum(inputText[0]);
finalText = numToLetter((firstAlpha + key) %26);
//inputText[0] = finalText[0];

for (int x = 1; x < inputText.length(); x++)
{

finalText += autokeyE(letterToNum(inputText[x-1]), letterToNum(inputText[x]));
}
cout << finalText << endl;
}

if (option == 2)
{
cout << "Please input your encrypted text to decrypt." << endl ;
cin >> inputText;
string finalText = "";

firstAlpha = letterToNum(inputText[0]);
finalText = numToLetter((firstAlpha + key) %26);

for (int x = 1; x < inputText.length(); x++)
{
//cout << inputText[x]; Testing output
finalText += autokeyD(inputText[x]);
}
cout << finalText << endl;
}
}
while (!inputText.length() == 0);
}

char autokeyE(int c, int n)
{
cout << "Keystream: " << n << " | Current Subkey: " << c << endl;

int result = 0;
//c = toupper(c);
result = ((c + n) +26 )%26;
cout << "C as a numtoletter: " << numToLetter(result) << " Result: " << result << endl;
return numToLetter(result);
return c;
}

char autokeyD(char c)
{
//Decrypting Shift -1
if (isalpha(c))
{
c = toupper(c);
c = (((c - 65) - 1) % 26) + 65;
}
return c;
}

char numToLetter(int n)
{
assert(n >= 1 && n <= 32);
return "ABCDEFGHIJKLMNOPQRSTUVWXYZ ;:,."[n];
}

int letterToNum(char n)
{
if (isalpha(n))
{
n = toupper(n);
return(int) n - 65;
}
else
{
cout << "REUTRNING A NON ALPHA CHARACTER AS: " << n << endl;
return(int) n -30;
}

}

0

Решение

Я не понимаю ваш вопрос, но я думаю, что ответ будет заключаться в том, чтобы сделать обратную косую черту перед каждым неработающим символом, например: "\;\:\,\." (некоторые из них могут работать, так что делайте это только с теми, которые этого не делают)

0

Другие решения

Вы можете обрабатывать символы, используя isPunct в C ++, таких как:

if (isPunct(inputText[x]) {
//do whatever it is you need to do
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector