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

Зашифровать текст - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
semb
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 9
24.05.2013, 00:50     Зашифровать текст #1
Чтобы зашифровать текст, записанный с помощью русских букв и знаков препинания, его можно переписать, заменив каждую букву непосредственно следующей за ней по алфавиту (буква я заменяется на а). Зашифровать данный текст. Расшифровать данный текст.
Помогите пожалуйста. Очень надо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MyMind
24 / 24 / 7
Регистрация: 14.05.2013
Сообщений: 68
24.05.2013, 02:44     Зашифровать текст #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
43
44
45
46
47
48
49
#include <conio.h>
#include <iostream>
#include <string>
 
using namespace std;
 
const char insane_ABC[] = "*ЎўЈ¤Ґс¦§Ё©Є«¬*®Їабвгдежзийклмноп";
const char normal_ABC[] = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
 
char encryption(char b) {
    for (int j = 0; j < 33; j++)
        if (b == insane_ABC[j]) return normal_ABC[j+1];
}
 
char decryption(char b) {
    for (int j = 0; j < 33; j++)
        if (b == insane_ABC[j]) return normal_ABC[j-1];
}
 
int main() {
    int c, kod;
    setlocale(LC_ALL, "Russian");
    string s;
    cout << "Введите строку: ";
    getline(cin, s);
    cout << "Выберите операцию: " << endl;
    cout << "   1 - зашифровать" << endl;
    cout << "   2 - расшифровать" << endl;
    cout << "Ваш выбор: ";
    cin >> kod;
    c = s.length();
    switch(kod) {
        case 1:
            for (int i = 0; i < c; i++)
                if (s[i] >= '*' && s[i] <= 'п')
                    if (s[i] != 'п') s[i] = encryption(s[i]);
                    else s[i] = normal_ABC[0];
            break;
        case 2:
            for (int i = 0; i < c; i++)
                if (s[i] >= '*' && s[i] <= 'п')
                    if (s[i] != ' ') s[i] = decryption(s[i]);
                    else s[i] = normal_ABC[33];
            break;
    }
    cout << endl << "Результат: " << s;
    getch();
    return 0;
}
строку с "кракозябрами", массив insane_ABC, создайте сами. так как сюда эта строка скопировалась со звёздочками._.
MyMind
24 / 24 / 7
Регистрация: 14.05.2013
Сообщений: 68
24.05.2013, 02:50     Зашифровать текст #3
вот файл с со строкой, которая находится в insane_ABC
Вложения
Тип файла: txt Новый текстовый документ.txt (33 байт, 17 просмотров)
MyMind
24 / 24 / 7
Регистрация: 14.05.2013
Сообщений: 68
24.05.2013, 03:13     Зашифровать текст #4
в общем, скопировалось оно как-то криво, поэтому вот вам .cpp файлик
Вложения
Тип файла: rar 1.rar (709 байт, 25 просмотров)
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
24.05.2013, 08:59     Зашифровать текст #5
Цитата Сообщение от MyMind Посмотреть сообщение
вот что у меня вышло._.
строку с "кракозябрами", массив insane_ABC, создайте сами. так как сюда эта строка скопировалась со звёздочками._.
чтобы каждая буква на последующую в алфавите заменилась
const char insane_ABC[] = "*ЎўЈ¤Ґс¦§Ё©Є«¬*®Їабвгдежзийклмноп";
const char normal_ABC[] = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
MyMind
24 / 24 / 7
Регистрация: 14.05.2013
Сообщений: 68
24.05.2013, 09:13     Зашифровать текст #6
в чём проблемы?
semb
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 9
24.05.2013, 12:59  [ТС]     Зашифровать текст #7
Почему-то не работает
C++
1
getch();
и что должно быть вместо крокозябр?

Добавлено через 17 минут
Всё работает спасибо. Я разобрался.

Добавлено через 37 минут
Исправил insane_ABC. Но выдаётся ошибка cannot open output file name.exe: Permission denied((
MyMind
24 / 24 / 7
Регистрация: 14.05.2013
Сообщений: 68
24.05.2013, 13:01     Зашифровать текст #8
я же вам кинул файлик с кодом в архиве. должно всё работать
semb
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 9
24.05.2013, 13:09  [ТС]     Зашифровать текст #9
вот содержимое файла
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
#include <conio.h>
#include <iostream>
#include <string>
 
using namespace std;
 
const char insane_ABC[] = " ЎўЈ¤Ґс¦§Ё©Є«¬*®Їабвгдежзийклмноп";
const char normal_ABC[] = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
 
char encryption(char b) {
    for (int j = 0; j < 33; j++)
        if (b == insane_ABC[j]) return normal_ABC[j+1];
}
 
char decryption(char b) {
    for (int j = 0; j < 33; j++)
        if (b == insane_ABC[j]) return normal_ABC[j-1];
}
 
int main() {
    int c, kod;
    setlocale(LC_ALL, "Russian");
    string s;
    cout << "Введите строку: ";
    getline(cin, s);
    cout << "Выберите операцию: " << endl;
    cout << "   1 - зашифровать" << endl;
    cout << "   2 - расшифровать" << endl;
    cout << "Ваш выбор: ";
    cin >> kod;
    c = s.length();
    switch(kod) {
        case 1:
            for (int i = 0; i < c; i++)
                if (s[i] >= ' ' && s[i] <= 'п')
                    if (s[i] != 'п') s[i] = encryption(s[i]);
                    else s[i] = normal_ABC[0];
            break;
        case 2:
            for (int i = 0; i < c; i++)
                if (s[i] >= ' ' && s[i] <= 'п')
                    if (s[i] != ' ') s[i] = decryption(s[i]);
                    else s[i] = normal_ABC[33];
            break;
    }
    cout << endl << "Результат: " << s;
    getch();
    return 0;
}
Программа запустилась, но после после выбора расшифровать или зашифровать, ничего не происходит.
Помогите разобраться пожалуйста.
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
24.05.2013, 13:55     Зашифровать текст #10
C++
1
_getch();
а не
C++
1
getch();
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
24.05.2013, 14:04     Зашифровать текст #11
Вот, все работает
Миниатюры
Зашифровать текст   Зашифровать текст  
semb
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 9
24.05.2013, 15:25  [ТС]     Зашифровать текст #12
А выложите пожалуйста код. А то я может что-то не так сделал.
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
24.05.2013, 15:42     Зашифровать текст #13
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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <string>
 
using namespace std;
 
const char insane_ABC[] = " ЎўЈ¤Ґс¦§Ё©Є«¬*®Їабвгдежзийклмноп";
const char normal_ABC[] = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
 
char encryption(char b) {
    for (int j = 0; j < 33; j++)
        if (b == insane_ABC[j]) return normal_ABC[j+1];
}
 
char decryption(char b) {
    for (int j = 0; j < 33; j++)
        if (b == insane_ABC[j]) return normal_ABC[j-1];
}
 
int main() {
    int c, kod;
    setlocale(LC_ALL, "Russian");
    string s;
    cout << "Введите строку: ";
    getline(cin, s);
    cout << "Выберите операцию: " << endl;
    cout << "   1 - зашифровать" << endl;
    cout << "   2 - расшифровать" << endl;
    cout << "Ваш выбор: ";
    cin >> kod;
    c = s.length();
    switch(kod) {
        case 1:
            for (int i = 0; i < c; i++)
                if (s[i] >= ' ' && s[i] <= 'п')
                    if (s[i] != 'п') s[i] = encryption(s[i]);
                    else s[i] = normal_ABC[0];
            break;
        case 2:
            for (int i = 0; i < c; i++)
                if (s[i] >= ' ' && s[i] <= 'п')
                    if (s[i] != ' ') s[i] = decryption(s[i]);
                    else s[i] = normal_ABC[33];
            break;
    }
    cout << endl << "Результат: " << s;
    _getch();
    return 0;
}
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
24.05.2013, 15:45     Зашифровать текст #14
стоп так оно некорректно копирует... Вот
Вложения
Тип файла: rar Shifr.rar (654 байт, 10 просмотров)
semb
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 9
24.05.2013, 15:54  [ТС]     Зашифровать текст #15
В строке insane_ABC[] = "бвгдеёжзийклмнпорстуфхцчшщъыьэюяа" записанно это?
А то везде insane_ABC[] = "*ЎўЈ¤Ґс¦§Ё©Є«¬*®Їабвгдежзийклмноп".
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
24.05.2013, 16:26     Зашифровать текст #16
Ну да, условие свое посмотри. Поэтому и файлом скинули.
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
24.05.2013, 16:33     Зашифровать текст #17
Вот это точно рабочий, ничего не меняй, просто запусти.
Все-таки там записано все правильно.
Вложения
Тип файла: rar Shifr.rar (722 байт, 18 просмотров)
semb
0 / 0 / 0
Регистрация: 19.12.2012
Сообщений: 9
24.05.2013, 17:03  [ТС]     Зашифровать текст #18
Вот это менять точно надо-insane_ABC[] = " ЎўЈ¤Ґс¦§Ё©Є«¬*®Їабвгдежзийклмноп";
MyMind
24 / 24 / 7
Регистрация: 14.05.2013
Сообщений: 68
24.05.2013, 17:29     Зашифровать текст #19
ну я же всё написал, и даже кинул вам файлик с расширением .cpp
могу всю прогу в вижуале кинуть, если надо.
у меня всё работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 17:31     Зашифровать текст
Еще ссылки по теме:

C++ Зашифровать текст и дешифровать, заменив каждую букву порядковым номером в алфавите
C++ Зашифровать текст
C++ Зашифровать текст методом простой одинарной перестановки

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

Или воспользуйтесь поиском по форуму:
vetal0007
27 / 27 / 0
Регистрация: 11.02.2012
Сообщений: 299
24.05.2013, 17:31     Зашифровать текст #20
Да, так и надо, если поменяешь работать не будет. Пробовал)
Yandex
Объявления
24.05.2013, 17:31     Зашифровать текст
Ответ Создать тему
Опции темы

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