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

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

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

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

19.09.2012, 19:50. Просмотров 373. Ответов 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++
Пытаюсь сделать шифрование через SLL, проблема в том, что если задавать строку для шифрования большую, то строка обрезается (маленькие...

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

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

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

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

Ошибка нарушения прав доступа при чтении по адресу, возникающая при инициализации трехмерного массива - C++
Очень нужна ваша помощь! Я уже не знаю что тут можно сделать. Код части программы, где вылазит ошибка ниже. Коротко о проблеме: я...

Ошибка при компилировании - C++
При компилировании любого кода всегда эта ошибка: c:\program files\microsoft visual studio 8\vc\include\string(3) : fatal error C1014:...

Ошибка при линковании - C++
Подскажите, в MSVS 6 какими-то заскоками наверное глючит линкеровщик, выдает ошибку линкования на точно верных кодах, проверял, даже на...

Ошибка при компиляции - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstdio&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; #include...

Ошибка при сортировке - C++
При сортировке массива вылетает причем именно на последнем числе сортирую так : for (int i=0;i&lt;count;i++) { if (a&gt;a) { ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,653
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
Благодарю, действительно помогло. С меня плюс
Yandex
Объявления
19.09.2012, 20:04     Ошибка при шифровании
Ответ Создать тему
Опции темы

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