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

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

Восстановить пароль Регистрация
 
Aleksanteri
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 5
19.09.2012, 19:50     Ошибка при шифровании #1
Приветствую обитателей сего форума.
Недавно сел решать задачку, и вроде бы все получилось, но - выводит-то не те значения.
Сама задача в том, чтобы пользователь ввел строку, мы ее зашифровали (сами написали для этого функцию) и дешифровали.

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

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++ Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы
При передачи указателя на обьект ошибка,а при передаче ссылки на указатель нет. Почему? C++
При выполнении разных операций с MS VS2013, например, при закрытии, иногда появляется ошибка C++
Ошибка при вызове метода класса, при чтении из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для 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
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
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     Ошибка при шифровании
Ответ Создать тему
Опции темы

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