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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Aleksanteri
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 5
#1

Ошибка при шифровании - C++

19.09.2012, 19:50. Просмотров 377. Ответов 3
Метки нет (Все метки)

Приветствую обитателей сего форума.
Недавно сел решать задачку, и вроде бы все получилось, но - выводит-то не те значения.
Сама задача в том, чтобы пользователь ввел строку, мы ее зашифровали (сами написали для этого функцию) и дешифровали.

И так, весь код:

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
#include <iostream>
#include <cstring>
using namespace std;
 
void getShifr(char string[100]);
void unShifr(char string[100]);
 
int main() {
    char buff[100];
    cout << "Введите строку до 100 символов: ";
    cin >> buff;
    cout << "Строка до шифрования: " << buff << endl;
    getShifr(buff);
    cout << "Строка после шифрования: " << buff << endl;
    unShifr(buff);
    cout << "Строка после дешифровки: " << buff << endl;
}
 
void getShifr(char string[100]) {
    char alphabet[37][2]={
    {'a','b'},{'b','c'},{'c','d'},{'d','e'},{'e','f'},{'f','g'},
    {'g','h'},{'h','i'},{'i','j'},{'j','k'},{'k','l'},{'l','m'},
    {'m','n'},{'n','o'},{'o','p'},{'p','q'},{'q','r'},{'r','s'},
    {'s','t'},{'t','u'},{'u','v'},{'v','w'},{'w','x'},{'x','y'},
    {'y','z'},{'z','a'},{'1','!'},{'2','@'},{'3','#'},{'4','$'},
    {'5','%'},{'6','^'},{'7','&'},{'8','*'},{'9','('},{'0',')'}, {' ', '.'}
    };
    int size=sizeof(string)/sizeof(char);
    //----------------------------------//
    for(int i=0; i<=size; i++) {
        for(int j=0; j<=sizeof(alphabet)/sizeof(char); j++) {
            if(string[i]==alphabet[j][0]) string[i] = alphabet[j][1];
        }
    }           
}
 
void unShifr(char string[100]) {
    char alphabet[37][2]={
    {'a','b'},{'b','c'},{'c','d'},{'d','e'},{'e','f'},{'f','g'},
    {'g','h'},{'h','i'},{'i','j'},{'j','k'},{'k','l'},{'l','m'},
    {'m','n'},{'n','o'},{'o','p'},{'p','q'},{'q','r'},{'r','s'},
    {'s','t'},{'t','u'},{'u','v'},{'v','w'},{'w','x'},{'x','y'},
    {'y','z'},{'z','a'},{'1','!'},{'2','@'},{'3','#'},{'4','$'},
    {'5','%'},{'6','^'},{'7','&'},{'8','*'},{'9','('},{'0',')'}, {' ', '.'}
    };
    int size=sizeof(string)/sizeof(char);
    for(int i=0; i<=size; i++) {
        for(int j=0; j<=sizeof(alphabet)/sizeof(char); j++) {
            if(string[i]==alphabet[j][1]) string[i] = alphabet[j][0];
        }
    }   
}
В двух словах: я получаю строку, передаю ее в виде массива в функцию, там в цикле сверяю буквы и заменяю их на аналог (использую шифрование методом подстановки). Все символы съезжают направо, то есть a шифруется в b, b в c и т.д.

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

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2012, 19:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при шифровании (C++):

ошибка в шифровании - C++
Пытаюсь сделать шифрование через SLL, проблема в том, что если задавать строку для шифрования большую, то строка обрезается (маленькие...

Работа с файлами при шифровании - C++
Доброго времени суток, всем! Дали задание, реализовать шифрование файла произвольного формата алгоритмом AES, используя CryptoPP. Я...

RC4 увеличение файла при шифровании - C++
реализую шифрование текстового файла шифром RC4 расшифровка - просто применение алгоритма же к шифрованному тексту. но исходный я не...

Генерация ключей в DES шифровании - C++
Читаю о генерации ключей в DES шифровании. &quot;Ключи {\displaystyle k_{i}} k_i получаются из начального ключа {\displaystyle k} k (56 бит =...

Ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске программы возникает ошибка - C++
Я знаю точно, что ошибка в конструкторе с параметром. Компилятор не ругается, но при запуске моей программы windows выдает ошибку. Почему ?...

Ошибка при компиляции. Где ошибка? (Работа с классом) - C++
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined reference to `MeterNZiF::MeterNZiF()' &quot; на 7 строку приложения. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
19.09.2012, 19:56 #2
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
void getShifr(char string[100]) {
    char alphabet[37][2]={
    {'a','b'},{'b','c'},{'c','d'},{'d','e'},{'e','f'},{'f','g'},
    {'g','h'},{'h','i'},{'i','j'},{'j','k'},{'k','l'},{'l','m'},
    {'m','n'},{'n','o'},{'o','p'},{'p','q'},{'q','r'},{'r','s'},
    {'s','t'},{'t','u'},{'u','v'},{'v','w'},{'w','x'},{'x','y'},
    {'y','z'},{'z','a'},{'1','!'},{'2','@'},{'3','#'},{'4','$'},
    {'5','%'},{'6','^'},{'7','&'},{'8','*'},{'9','('},{'0',')'}, {' ', '.'}
    };
    int size=sizeof(string)/sizeof(char);
    //----------------------------------//
    for(int i=0; i<=size; i++) {
        for(int j=0; j<=sizeof(alphabet)/sizeof(char); j++) {
            if(string[i]==alphabet[j][0])
            {
               string[i] = alphabet[j][1];
               break;
            }
        }
    }           
}
 
void unShifr(char string[100]) {
    char alphabet[37][2]={
    {'a','b'},{'b','c'},{'c','d'},{'d','e'},{'e','f'},{'f','g'},
    {'g','h'},{'h','i'},{'i','j'},{'j','k'},{'k','l'},{'l','m'},
    {'m','n'},{'n','o'},{'o','p'},{'p','q'},{'q','r'},{'r','s'},
    {'s','t'},{'t','u'},{'u','v'},{'v','w'},{'w','x'},{'x','y'},
    {'y','z'},{'z','a'},{'1','!'},{'2','@'},{'3','#'},{'4','$'},
    {'5','%'},{'6','^'},{'7','&'},{'8','*'},{'9','('},{'0',')'}, {' ', '.'}
    };
    int size=sizeof(string)/sizeof(char);
    for(int i=0; i<=size; i++) {
        for(int j=0; j<=sizeof(alphabet)/sizeof(char); j++) {
            if(string[i]==alphabet[j][1])
            {
               string[i] = alphabet[j][0];
               break;
            }
        }
    }   
}
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
19.09.2012, 20:04 #3
Цитата Сообщение от Aleksanteri Посмотреть сообщение
j<=sizeof(alphabet)/sizeof(char);
Цитата Сообщение от Aleksanteri Посмотреть сообщение
alphabet[37][2]
а что у тебя в alphabet размер элемента символ? или два символа
Цитата Сообщение от Aleksanteri Посмотреть сообщение
{'a','b'},
??
во первых сделай alphabet отдельным глобальным массивом чтобы обе функции обращались к одному массиву, этим ты избежишь ошибки при не одинаковой инициализации массивов
во вторых объяви структуру
типа
C++
1
2
3
4
5
6
struct codes
{
char x;
char y;
}
codes alphabet[37];
а в третьих кодировка смешением делается проще
например
кодировка
C++
1
string[i] ++;
декодировка
C++
1
string[i] --;
Aleksanteri
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 5
19.09.2012, 20:04  [ТС] #4
Благодарю, действительно помогло. С меня плюс
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2012, 20:04
Привет! Вот еще темы с ответами:

Реализовать через тип данных структура. При сборке и отладки возникает ошибка. В чем ошибка? - C++
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и вывести наименование товара, цена которого...

типизированный файл, ошибка ошибка при выходе - C++
Работа с типизированным файлом. В функцию вывода добавляю проверку if для вывода персонала только 1 подразделения. Выводит на 1 элемент...

Ошибка при вызове метода класса, при чтении из файла - C++
добрый день, пытаюсь считать данные из и запихнуть их в список в файле у меня вот такие данные a01 b10 А и Б надо запихнуть в...

Ошибка памяти при выполнении, при компиляции не выводит ошибки - C++
ПОмогите плс программа вводит строку символов до точки, а после вычисляет процент согласных в этой строке и выводит их в обратном порядке....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.09.2012, 20:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru