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

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

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

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

19.09.2012, 19:50. Просмотров 359. Ответов 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++ Ошибка при компиляции
Ошибка при работе с OpenCV: "нарушение прав доступа при чтении по адресу" C++
При передачи указателя на обьект ошибка,а при передаче ссылки на указатель нет. Почему? C++
C++ Ошибка с массивом: программа при вводе "ступорится" при нажатии клавиши Enter
При выполнении разных операций с MS VS2013, например, при закрытии, иногда появляется ошибка C++
Ошибка при вызове метода класса, при чтении из файла C++
C++ Ошибка нарушения прав доступа при чтении по адресу, возникающая при инициализации трехмерного массива
RC4 увеличение файла при шифровании C++
C++ Ошибка при загрузке фото - нарушение прав доступа при чтении по адресу 0x00814000
Ошибка при работе со списком: "Сбой при преобразовании в COFF: Файл недопустим или поврежден" C++
C++ Использование шаблонов при наследовании, ошибка при компиляции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
6484 / 4950 / 455
Регистрация: 14.02.2011
Сообщений: 16,395
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     Ошибка при шифровании
Ответ Создать тему
Опции темы

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