Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 1
1

Модифицировать рассмотренную ниже программу для работы с текстами на русском языке

16.04.2019, 14:35. Показов 832. Ответов 0

Author24 — интернет-сервис помощи студентам
Ребзя, нужна помощь. Программу по шифровке и расшифровке смог сделать только для латиницы. Теперь хочу, чтобы она работала и с русским алфавитом.
Вот модули программы.

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <cctype>
#include "modAlphaCipher.h"
using namespace std;
// проверка, чтобы строка состояла только из прописных букв
bool isValid(const string& s)
{
    for(auto c:s)
        if (!isalpha(c) || !isupper(c))
            return false;
    return true;
}
int main(int argc, char **argv)
{
    string key;
    string text;
    unsigned op;
    cout<<"Cipher ready. Input key: ";
    cin>>key;
    if (!isValid(key)) {
        cerr<<"key not valid\n";
        return 1;
    }
    cout<<"Key loaded\n";
    modAlphaCipher cipher(key);
    do {
        cout<<"Cipher ready. Input operation (0-exit, 1-encrypt, 2-decrypt): ";
        cin>>op;
        if (op > 2) {
            cout<<"Illegal operation\n";
        } else if (op >0) {
            cout<<"Cipher ready. Input text: ";
            cin>>text;
            if (isValid(text)) {
                if (op==1) {
                    cout<<"Encrypted text: "<<cipher.encrypt(text)<<endl;
                } else {
                    cout<<"Decrypted text: "<<cipher.decrypt(text)<<endl;
                }
            } else {
                cout<<"Operation aborted: invalid text\n";
            }
        }
    } while (op!=0);
    return 0;
}
modAlphaCipher.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "modAlphaCipher.h"
modAlphaCipher::modAlphaCipher(const std::string& skey)
{
    for (unsigned i=0; i<numAlpha.size(); i++) {
        alphaNum[numAlpha[i]]=i;
    }
    key = convert(skey);
}
std::string modAlphaCipher::encrypt(const std::string& open_text)
{
    std::vector<int> work = convert(open_text);
    for(unsigned i=0; i < work.size(); i++) {
        work[i] = (work[i] + key[i % key.size()]) % alphaNum.size();
    }
    return convert(work);
}
std::string modAlphaCipher::decrypt(const std::string& cipher_text)
{
    std::vector<int> work = convert(cipher_text);
    for(unsigned i=0; i < work.size(); i++) {
        work[i] = (work[i] + alphaNum.size() - key[i % key.size()]) % alphaNum.size();
    }
    return convert(work);
}
inline std::vector<int> modAlphaCipher::convert(const std::string& s)
{
    std::vector<int> result;
    for(auto c:s) {
        result.push_back(alphaNum[c]);
    }
    return result;
}
inline std::string modAlphaCipher::convert(const std::vector<int>& v)
{
    std::string result;
    for(auto i:v) {
        result.push_back(numAlpha[i]);
    }
    return result;
}
modAlphaCipher.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#pragma once
#include <vector>
#include <string>
#include <map>
class modAlphaCipher
{
private:
    std::string numAlpha =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//алфавит по порядку
    std::map <char,int> alphaNum;
//ассоциативный массив "номер по символу"
    std::vector <int> key;
//ключ
    std::vector<int> convert(const std::string& s);
//преобразование строка-вектор
    std::string convert(const std::vector<int>& v);
//преобразование вектор-строка
public:
    modAlphaCipher()=delete;
//запретим конструктор без параметров
    modAlphaCipher(const std::string& skey);
//конструктор для установки ключа
    std::string encrypt(const std::string& open_text);  //зашифрование
    std::string decrypt(const std::string& cipher_text);//расшифрование
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2019, 14:35
Ответы с готовыми решениями:

Настройка PHPStorm для работы с доменом на русском языке по FTP
Доброго времени суток. Столкнулся со следующей проблемой: Заказчик зарегистрировал домен на...

Создать шуточную программу, которая при вводе имени на русском языке выдаст, как оно звучит на японском языке
Такая задача была сегодня на программировании. Создать шуточную программу, которая при вводе имени...

Библиотека для работы с русскими текстами!
Здорова господа!!! Нужна в общем библиотека которая будет проверять русский текст например на...

Функционал для работы с текстами в файлах
А каким функционалом обладает Си для работы с текстами в файлах? Имею в виду функции, регулярные...

0
16.04.2019, 14:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2019, 14:35
Помогаю со студенческими работами здесь

Переопределение Combobox для работы с многоабзацевыми текстами
Здравствуйте. Столкнулся с проблемой, что надо переопределить работу стандартного Combobox, добавив...

Опишите программу на русском языке
Пожалуйста помогите!!!!

Разработать программу на языке Ассемблера для работы в среде MASM
Разработать программу на языке Ассемблера для работы в среде MASM на основе выходных данных. x =...

ЧПУ для сайта на русском языке
всем привет!!! у меня небольшая проблема возникла с ЧПУ на русском языке. когда делал ЧПУ не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru