Форум программистов, компьютерный форум CyberForum.ru

Разбираемся с функциями и пишем Encode & Decode - C++

Восстановить пароль Регистрация
 
8lgm
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 16
13.12.2013, 20:32     Разбираемся с функциями и пишем Encode & Decode #1
Напишите подпрограммы Encode (зашифровать) и Decode (расшифровать), которые получают два параметра str и alpha типа string. В первом параметре задается слово, подлежащее шифрованию (расшифровке), второй представляет собой некоторую перестановку 26 латинских букв алфавита. Принцип преобразования для шифрации состоит в следующем. Если некоторая буква в str является k–ой буквой в обычном алфавите, то вместо нее должна быть взята буква из k–ой позиции "нового" алфавита alpha. Для подпрограммы дешифровки используется обратный принцип.


Собственно вот код, естественно не работает.

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
47
48
49
50
51
52
53
#include <iostream>
#include <string>
#include <conio.h>
//#define a "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
//#define b "ZYXWVUTSRQPONMLKJIHGFEDCBA"
 
char a[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char b[27]="ZYXWVUTSRQPONMLKJIHGFEDCBA";
 
using namespace std;
 
void decode (char str)
{
 
    cout << str << endl;
    int i=0, j=0, d=sizeof str;
    for (i; i<d; i++)
    {
        for (j; j<27; j++)
    {
        if (str[i]==b[j]) str[i]=j;
    }
 
    }
 
        cout << str << endl;
    
 
}
 
void encode (char str)
{
    cout << str << endl;
    int i=0, j=0, d=sizeof str;
    for (i; i<d; i++)
    { for (j; j<27; j++)
    {
        if (str[i]==a[j]) str[i]=j;
    }
    }
    decode (str);
}
 
int main()
{    
    cout << "Encode alphabet =" << b <<endl;
    cout << "Decode alphabet =" << a <<endl;
    char str;
    cout << "Input some text=";
    getline (cin, str);
    encode (str);
    getch ();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2013, 20:32     Разбираемся с функциями и пишем Encode & Decode
Посмотрите здесь:

Проблема с проверкой условия цикла for( int i=2; !((n%i||d%i)&&!(n%i&&d%i))==0 ; i++) C++
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& C++
C++ Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? C++
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
13.12.2013, 21:14     Разбираемся с функциями и пишем Encode & Decode #2
Исходя из предположения, что текст капсом и ключ всегда верен:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string encode(const string& plaintext, const string& eKey)
{
    string cyphertext = plaintext;
    for(size_t i = 0; i != plaintext.size(); ++i)
        cyphertext[i] = eKey[plaintext[i] - 'A'];
    return cyphertext;
}
 
string getDecodeKey(const string& eKey)
{
    string dKey = eKey;
    for(size_t i = 0; i != eKey.size(); ++i)
        dKey[eKey[i] - 'A'] = 'A' + i;
    return dKey;
}
 
string decode(const string& cyphertext, const string& eKey)
{
    return encode(cyphertext, getDecodeKey(eKey));
}
8lgm
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 16
14.12.2013, 13:11  [ТС]     Разбираемся с функциями и пишем Encode & Decode #3
Цитата Сообщение от Nick Alte Посмотреть сообщение
Исходя из предположения, что текст капсом и ключ всегда верен:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string encode(const string& plaintext, const string& eKey)
{
    string cyphertext = plaintext;
    for(size_t i = 0; i != plaintext.size(); ++i)
        cyphertext[i] = eKey[plaintext[i] - 'A'];
    return cyphertext;
}
 
string getDecodeKey(const string& eKey)
{
    string dKey = eKey;
    for(size_t i = 0; i != eKey.size(); ++i)
        dKey[eKey[i] - 'A'] = 'A' + i;
    return dKey;
}
 
string decode(const string& cyphertext, const string& eKey)
{
    return encode(cyphertext, getDecodeKey(eKey));
}
Да, ключ всегда верен и капсом все пишется. Это на стринг, а я должен написать на char +для меня ваш код не очень понятен, хотя общий смысл вижу, что тот же.
KOPOJI
15.12.2013, 12:51     Разбираемся с функциями и пишем Encode & Decode
  #4
 Комментарий модератора 
Кросспостинг http://www.cyberforum.ru/order-progr...ad1041191.html.
Закрыто.
Yandex
Объявления
15.12.2013, 12:51     Разбираемся с функциями и пишем Encode & Decode
Закрытая тема Создать тему
Опции темы

Текущее время: 02:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru