Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 27.05.2021
Сообщений: 20

Шифрование строк и запись в файл

01.09.2021, 19:58. Показов 5574. Ответов 23

Студворк — интернет-сервис помощи студентам
Доброго вечера суток!
Ввиду отсутствия достаточного опыта запутался совсем (подозреваю, что в трех соснах).
Суть задания такова:

В начале выполнения программы создается внутренняя переменная – строка S (по умолчанию она пустая).
Организовать пользовательское меню: ( 1 ) ввод строки с клавиатуры. ( 2 ) вывод строки на экран ( 3 ) зашифровать строку ( 4 ) расшифровать строку ( 5 ) записать строку в текстовый файл (имя файла задает пользователь) ( 6 ) считать строку из текстового файла (имя файла задает пользователь) ( 0 ) завершить работу
Каждое действие по меню реализовать в виде отдельных функций. При вводе (1) — пользователю предлагается ввести строку, состоящую из русских букв. Введенная строка записывается в переменную S. При вводе (2) — на экран выводится текущее значение S.
При вводе (3) — реализуется шифрование строки S способом согласно варианту. Полученная зашифрованная строка записывается в переменную S.
При вводе (4) — выполняется расшифрование строки S. Полученная зашифрованная строка записывается в переменную S.
При вводе (5) — пользователю предлагается ввести строку (имя файла).
Открывается для записи текстовый файл с заданным именем. В файл
записывается строка S. После успешной записи – вывести на экран
сообщение «Файл успешно сохранен».
При вводе (6) — пользователю предлагается ввести строку (имя файла).
Открывается для чтения текстовый файл с заданным именем (если файла нет – вывести об этом сообщение). Из файла читается строка S. После этого вывести на экран сообщение «Файл успешно прочитан».
При вводе (0) — вывести на экран сообщение «Сеанс окончен!» и завершить работу программы.
При вводе любым других символов — выдавать сообщение «Команда неизвестна».

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

С использованием похожих примеров что-то написал. Работают по отдельности шифрование, запись в файл, чтение с файла. Не могу реализовать ввод имени файла с клавиатуры. Во всех примерах, которые я просмотрел, имя файла задается при написании кода. Также не разобрался, как реализовать два первых пункта в отдельных функциях и где должна быть "S"...

Короче текста много, а в кучу собрать всё не получается...

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <Windows.h>
#include <string>
#include <fstream>
using namespace std;
 
string encode(string S) { //зашифровка строки (смещение на 7 позиций)
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i = 0, j = 0, k = 7;
    char ABC[] = { 'А','Б','В','Г','Д','Е','Ж','З','И',
                'Й','К','Л','М','Н','О','П','Р','С',
                'Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ',
                'Ы','Ь','Э','Ю','Я','_','.',',','0',
                '1','2','3','4','5','6','7','8','9' };
 
    for (i = 0; i < S.size(); i++)
    {
        if (S[i] == ' ') S[i] = ' ';
        else {
            //  str[i] = toupper(str[i]);
            for (j = 0; j < 45; j++)
            {
                if (S[i] == ABC[j])
                {
                    if (j >= 45)
                        S[i] = ABC[i - 45];
                    else
                        S[i] = ABC[j + k];
                    break;
                }
            }
        }
    }
    return S;
}
string decode(string S) { //расшифровка строки
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i = 0, j = 0, k = 7;
    char ABC[] = { 'А','Б','В','Г','Д','Е','Ж','З','И',
                'Й','К','Л','М','Н','О','П','Р','С',
                'Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ',
                'Ы','Ь','Э','Ю','Я','_','.',',','0',
                '1','2','3','4','5','6','7','8','9' };
 
    for (i = 0; i < S.size(); i++)
    {
        if (S[i] == ' ') S[i] = ' ';
        else {
            for (j = 0; j < 45; j++)
            {
                if (S[i] == ABC[j])
                {
                    if (j >= 45)
                        S[i] = ABC[i + 45];
                    else
                        S[i] = ABC[j - k];
                    break;
                }
            }
        }
    }
    return S;
}
void enter(string S) {//записать сроку в переменную S
    S = string(S);
    cin >> S;
    return;
 }
void outScreen(string S) { //вывести строку на экран
    cout << S << endl;
  }
void write(string S) { //записать строку в файл
    cout << "file name:";
    getline(cin, S);
    ofstream fout(S.c_str());
    fout << S;
    fout.close();
    cout << "Запись прошла успешно" << endl;
    cout << "****************************";
}
void open() { //считать строку из файла
    char buff[50];
    ifstream fin("text.txt");
    fin.getline(buff, 50);
    fin.close();
    cout << "Строка из файла: " << buff << endl;
    cout << "****************************";
}
int main()
{
    setlocale(LC_ALL, "Russian");
    string S;
    int a;
    do
    {
        cout << "Выберите действие: " << endl << "1-ввод строки с клавиатуры (используя кириллицу);" << endl << "2-вывод строки на экран" << endl
            <<"3-зашифровать строку;"<< endl << "4-расшифровать строку;" << endl << "5-записать строку в текстовый файл;" 
            << endl << "6-считать строку из текстового файла;" << endl << "0-завершить работу" << endl;
        cin >> a;
 
        if (a == 1)
        {   
            S = enter S;
           
        }
        else
            if (a==2)
        {
        
        }
 
        else 
            if (a == 3)
        {
            cout << "Ваша строка зашифрована: " << encode(S) << endl;
            S = encode(S);
            cout << "****************************";
        }
        else
            if (a == 4)
            {
                cout << "Ваша строка расшифрована: " << decode(S) << endl;
                S = decode(S);
                cout << "****************************";
            }
            else
                if (a == 5)
                {
                    write(S);
                }
                else
                    if (a == 6) {
                        open();
                    }
 
 
    } while (a != 0); //при а=0 - завершение работы
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.09.2021, 19:58
Ответы с готовыми решениями:

Чтение,шифрование и запись в один файл
Пишу программу шифрующую (CryptoAPI) файл,буфер - 1 килобайт,требуется сделать так чтобы чтение и запись происходили из/в один и тот же...

Шифрование информации и запись в файл с последующей расшифровкой
Подскажите, есть массив char, мне надо его записать в файл, но что бы информация была зашифрована, в дальнейшем нужно её считать и...

Считывание строк с файла, обработка каждой строки, запись обработанных строк в другой файл
Добрый день, уважаемые пользователи CyberForum. Столкнулся с такой проблемой Задание: Написать программу, которая во вводимом с...

23
Заблокирован
01.09.2021, 20:45
Реализуйте выбор меню через switch.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
switch (a){
   0 : cout<<"«Сеанс окончен!»"; 
      return EXIT_SUCCESS;
   1 :
      break;
   2 :
      break;
   3 :
      break;
   4 :
      break;
   5 :
      break;
   default : // введено некорректное значение
      break;
}
передавайте строку в функции по ссылке
C++
1
string decode(const string & S)
const - только там где входная строка S не изменяется

Цитата Сообщение от ramiras001 Посмотреть сообщение
Также не разобрался, как реализовать два первых пункта в отдельных функциях и где должна быть "S"...
Зачем ?
S - вроде на месте.

Добавлено через 1 минуту
Цитата Сообщение от ramiras001 Посмотреть сообщение
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
вынести в начало функции main

Добавлено через 1 минуту
функции write и open нужно переписать
1
0 / 0 / 0
Регистрация: 27.05.2021
Сообщений: 20
01.09.2021, 21:00  [ТС]
Спасибо за участие!
Буду пробовать сверстать...
0
Заблокирован
01.09.2021, 21:04
подсказка по функции write
C++
1
void write(const string& filename, const string& s)  // пишем строку s в файл с названием filename
1
0 / 0 / 0
Регистрация: 27.05.2021
Сообщений: 20
01.09.2021, 21:14  [ТС]
Организовать пользовательское меню: ( 1 ) ввод строки с клавиатуры. ( 2 ) вывод строки на экран

Не совсем понимаю условие и его реализацию. Нужно, после нажатия "1" ввести строку, а после нажатия "2" - вывести её на экран? А как будет видно, какую строку я ввел, если она попадет на экран после запуска следующей функции? Что я тут не так понимаю? Может кто-то сталкивался с подобными условиями?
0
Заблокирован
01.09.2021, 21:45
Цитата Сообщение от ramiras001 Посмотреть сообщение
Нужно, после нажатия "1" ввести строку, а после нажатия "2" - вывести её на экран?
да

C++
1
2
3
4
5
6
7
   1 :
      cout << "Введите строку : ";
      getline(cin, S);
      break;
   2 :
      cout << "Наша строка : " << S << endl;
      break;
Да, если мы выберем вывести строку до ее вводе, то ничего не увидим.
Можно сделать проверку на пустую строку, но по условию - это не нужно.

Я так понял суть задачи, дать возможность ввести строку, зашифровать ее, посмотреть что получилось, записать/прочитать ее из файла.

Добавлено через 2 минуты
Цитата Сообщение от ramiras001 Посмотреть сообщение
Каждое действие по меню реализовать в виде отдельных функций.
Да, странно что пункты 1 и 2 придется вынести в отдельную функцию, видимо автор задания не особо задавался адекватностью условий.

Добавлено через 35 секунд
Но это же не проблема.

Добавлено через 5 минут
Цитата Сообщение от ramiras001 Посмотреть сообщение
При вводе (1) — пользователю предлагается ввести строку, состоящую из русских букв.
Еще вот эта, формулировка, значит ли это что нужно фильтровать ввод, и запрашивать повторный, когда в строке присутствуют другие символы (кроме русского алфавита) ?
1
0 / 0 / 0
Регистрация: 27.05.2021
Сообщений: 20
02.09.2021, 14:56  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Еще вот эта, формулировка, значит ли это что нужно фильтровать ввод, и запрашивать повторный, когда в строке присутствуют другие символы (кроме русского алфавита) ?
Не знаю. Этот вопрос не уточнялся. Попробую обойтись выводом сообщения о необходимости ввести строку, состоящую из русских букв.

Добавлено через 4 часа 10 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
подсказка по функции write
C++Выделить код
1
void write(const string& filename, const string& s)  // пишем строку s в файл с названием filename
По условию имя файла требуется ввести с клавиатуры.
0
Заблокирован
02.09.2021, 15:17
Да, сначала запрашиваете ввод у пользователя, потом вызываете функцию записи/чтения в/из файла.
Это логическое разделения кода с участием пользователя и без него.

Добавлено через 3 минуты
Пример: вам может понадобится автоматическое сохранение, но у вас в функции запрашивается имя файла.
Написать новую функцию ? - Придется.
У меня уже такое отношение автоматом. Максимальное разделение кода взаимосвязи с пользователем от остального.
Но как бы по задаче не нужно. Но завтра может быть задача на расширение текущей.
Выбор за вами.

Добавлено через 1 минуту
Что то получилось связное ? Покажите.
0
0 / 0 / 0
Регистрация: 27.05.2021
Сообщений: 20
02.09.2021, 16:37  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Что то получилось связное ? Покажите.
Ещё раз благодарю за участие, но пока похвастать нечем
Обучаюсь дистанционно и не хватает живого общения с преподавателем и коллегами. Читаю, смотрю различные материалы - всё понятно. А пришло время собрать всё в некоторую рабочую систему, и вот 140 строк с пользовательскими функциями и десятком условий превращаются в кашу. Не знаю с какой стороны подступить, хотя понимаю, что далеко не самое сложное задание...

Добавлено через 21 минуту
Цитата Сообщение от SmallEvil Посмотреть сообщение
Да, сначала запрашиваете ввод у пользователя, потом вызываете функцию записи/чтения в/из файла.
Это логическое разделения кода с участием пользователя и без него.
Запрос имени файла у пользователя в теле функции main, а затем запись в него строки в функции write по ссылке? Я правильно понял?
0
Заблокирован
02.09.2021, 17:32
Цитата Сообщение от ramiras001 Посмотреть сообщение
Запрос имени файла у пользователя в теле функции main, а затем запись в него строки в функции write по ссылке? Я правильно понял?
Можно так, но лучше все же как в условии.
Вызываем функцию запроса имени файла, внутри этой функции вызываем функцию записи в файл.
Строку для записи передаем с main, потом в функцию записи в файл, по ссылке, что бы избежать копирования несколько раз.
С таким разделением, легко изменять способ ввода от пользователя, допустим проверку корректности имени файла,
обработку ошибок открытия файла, а в функции записи, происходит уже форматирования (если нужно) данных и их записи.
В данном случае, запись тривиально элементарна.
примерно может выглядеть так :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void write_to_file(ofstream & file, const string & s){
    file << s;
}
 
bool p_write_to_file(const string& s){ // записать в файл с запросом имени файла.
   string filename; // по умолчанию пустая строка
   getline(cin, filename);
   // тут может быть проверка корректности имени, или того что файл уже существует , и так далее
   ofstream file(filename);
   if (file.is_open()) // если файл открылся
   {
      write_to_file(file, s);
      return true;
   }
   return false;
}
Так как функция записи получилась однострочная, выносить ее в отдельную функцию уже дело вкуса.
вызов из main :
C++
1
2
3
4
if (p_write_to_file(S))
   cout<<"Файл успешно записан :"<<endl;
else
   cout<<"Ошибка записи в файл !"<<endl;
0
0 / 0 / 0
Регистрация: 27.05.2021
Сообщений: 20
02.09.2021, 17:33  [ТС]
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <iostream>
#include <Windows.h>
#include <string>
#include <fstream>
using namespace std;
 
string encode(string S) { //зашифровка строки (смещение на 7 позиций)
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i = 0, j = 0, k = 7;
    char ABC[] = { 'А','Б','В','Г','Д','Е','Ж','З','И',
                'Й','К','Л','М','Н','О','П','Р','С',
                'Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ',
                'Ы','Ь','Э','Ю','Я','_','.',',','0',
                '1','2','3','4','5','6','7','8','9' };
 
    for (i = 0; i < S.size(); i++)
    {
        if (S[i] == ' ') S[i] = ' ';
        else {
            //  str[i] = toupper(str[i]);
            for (j = 0; j < 45; j++)
            {
                if (S[i] == ABC[j])
                {
                    if (j >= 45)
                        S[i] = ABC[i - 45];
                    else
                        S[i] = ABC[j + k];
                    break;
                }
            }
        }
    }
    return S;
}
string decode(string S) { //расшифровка строки
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i = 0, j = 0, k = 7;
    char ABC[] = { 'А','Б','В','Г','Д','Е','Ж','З','И',
                'Й','К','Л','М','Н','О','П','Р','С',
                'Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ',
                'Ы','Ь','Э','Ю','Я','_','.',',','0',
                '1','2','3','4','5','6','7','8','9' };
 
    for (i = 0; i < S.size(); i++)
    {
        if (S[i] == ' ') S[i] = ' ';
        else {
            for (j = 0; j < 45; j++)
            {
                if (S[i] == ABC[j])
                {
                    if (j >= 45)
                        S[i] = ABC[i + 45];
                    else
                        S[i] = ABC[j - k];
                    break;
                }
            }
        }
    }
    return S;
}
//void enter(string S) {//записать сроку в переменную S
//    S = string(S);
//    cin >> S;
//    return;
// }
//void outScreen(string S) { //вывести строку на экран
//    cout << S << endl;
//  }
void write(const string& filename, const string& S) {  // пишем строку s в файл с названием filename
    ofstream fout;
    fout << S;
    fout.close();
    cout << "Запись прошла успешно" << endl;
    cout << "****************************";
}
void open(const string& filename, const string& S) { //считать строку из файла
    char buff[50];
    ifstream fin(filename);
    fin.getline(buff, 50);
    fin.close();
    cout << "Строка из файла: " << buff << endl;
    cout << "****************************";
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string S;
    int a;
    do
    {
        cout << "Выберите действие: " << endl << "1-ввод строки с клавиатуры (используя кириллицу);" << endl << "2-вывод строки на экран" << endl
            <<"3-зашифровать строку;"<< endl << "4-расшифровать строку;" << endl << "5-записать строку в текстовый файл;" 
            << endl << "6-считать строку из текстового файла;" << endl << "0-завершить работу" << endl;
        cin >> a;
 
        if (a == 1)
        {   
            cout << "Введите строку : ";
            getline(cin, S);
            break;
        }
        else
            if (a==2)
            {
                cout << "Наша строка : " << S << endl;
                break;
            }
 
        else 
            if (a == 3)
            {
            cout << "Ваша строка зашифрована: " << encode(S) << endl;
            S = encode(S);
            cout << "****************************";
            }
        else
            if (a == 4)
            {
                cout << "Ваша строка расшифрована: " << decode(S) << endl;
                S = decode(S);
                cout << "****************************";
            }
            else
                if (a == 5)
                {
                    cout << "Enter file name: ";
                    char filename[21] = { 0 };
                    cin >> filename;
                    write(filename, S);
                }
                else
                    if (a == 6) {
                        cout << "Enter file name: ";
                        char filename[21] = { 0 };
                        cin >> filename;
                        open (filename, S);
                    }
 
 
    } while (a != 0);
    system("pause");
    return 0;
}
После выбора пункт 1 - введите строку - сразу же выскакивает сообщение "для продолжения нажмите любую клавишу..." и после этого завершение работы.
0
Заблокирован
02.09.2021, 17:40
ключевое слово break; завершает работу цикла в котором он вызван.
break нужен при использовании switch в case секции.
С if-ами , как у вас, он не нужен.

Добавлено через 57 секунд
Я таки надеялся что сделаете через switch , и пример под него писал ))
0
0 / 0 / 0
Регистрация: 27.05.2021
Сообщений: 20
02.09.2021, 18:58  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Я таки надеялся что сделаете через switch , и пример под него писал ))
Я-то не против, но, повторюсь, не знаю с чего начать. До цикла не дошел. Решил с отдельными блоками разобраться. Прошу не принимать это как игнорирование дельного совета

Добавлено через 1 час 14 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
Что то получилось связное ? Покажите.
Боюсь, что нет...

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <Windows.h>
#include <string>
#include <fstream>
using namespace std;
 
string encode(string S) { //зашифровка строки (смещение на 7 позиций)
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i = 0, j = 0, k = 7;
    char ABC[] = { 'А','Б','В','Г','Д','Е','Ж','З','И',
                'Й','К','Л','М','Н','О','П','Р','С',
                'Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ',
                'Ы','Ь','Э','Ю','Я','_','.',',','0',
                '1','2','3','4','5','6','7','8','9' };
 
    for (i = 0; i < S.size(); i++)
    {
        if (S[i] == ' ') S[i] = ' ';
        else {
            //  str[i] = toupper(str[i]);
            for (j = 0; j < 45; j++)
            {
                if (S[i] == ABC[j])
                {
                    if (j >= 45)
                        S[i] = ABC[i - 45];
                    else
                        S[i] = ABC[j + k];
                    break;
                }
            }
        }
    }
    return S;
}
string decode(string S) { //расшифровка строки
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i = 0, j = 0, k = 7;
    char ABC[] = { 'А','Б','В','Г','Д','Е','Ж','З','И',
                'Й','К','Л','М','Н','О','П','Р','С',
                'Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ',
                'Ы','Ь','Э','Ю','Я','_','.',',','0',
                '1','2','3','4','5','6','7','8','9' };
 
    for (i = 0; i < S.size(); i++)
    {
        if (S[i] == ' ') S[i] = ' ';
        else {
            for (j = 0; j < 45; j++)
            {
                if (S[i] == ABC[j])
                {
                    if (j >= 45)
                        S[i] = ABC[i + 45];
                    else
                        S[i] = ABC[j - k];
                    break;
                }
            }
        }
    }
    return S;
}
 
void write(const string& filename, const string& S) {  // пишем строку s в файл с названием filename
    ofstream fout;
    fout << S;
    fout.close();
    cout << "Запись прошла успешно" << endl;
    cout << "****************************";
}
void open(const string& filename, const string& S) { //считать строку из файла
    char buff[50];
    ifstream fin(filename);
    fin.getline(buff, 50);
    fin.close();
    cout << "Строка из файла: " << buff << endl;
    cout << "****************************";
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    string S;
    int a;
    
    cout << "Выберите действие: " << endl << "1-ввод строки с клавиатуры (используя кириллицу);" << endl << "2-вывод строки на экран" << endl
    <<"3-зашифровать строку;"<< endl << "4-расшифровать строку;" << endl << "5-записать строку в текстовый файл;" 
    << endl << "6-считать строку из текстового файла;" << endl << "0-завершить работу" << endl;
     
    cin >> a;
 
        switch (a) {
            case 0 : cout << "«Сеанс окончен!»";
            return EXIT_SUCCESS;
            case 1 :cout << "Введите строку : ";
                    getline(cin, S);
            break;
            case 2 :cout << "Наша строка : " << S << endl;
            break;
            case 3 :cout << "Ваша строка зашифрована: " << encode(S) << endl;
                    S = encode(S);
                    cout << "****************************";
            break;
            case 4 :if (a == 4)
                    cout << "Ваша строка расшифрована: " << decode(S) << endl;
                    S = decode(S);
                    cout << "****************************";
            break;
            case 5 : cout << "Enter file name: ";
                    char filename[21] = { 0 };
                    cin >> filename;
                    write(filename, S);
            break;
            case 6:cout << "Enter file name: ";
                    char filename[21] = { 0 };
                    cin >> filename;
                    open(filename, S);
            break;
            default: cout << "Команда неизвестна";// введено некорректное значение
            break;
        }
 
    return 0;
}
0
Заблокирован
02.09.2021, 19:37
switch вместо конструкции из if else
главный цикл нужно оставить
C++
1
2
3
4
5
6
7
do{
    //  выводим список доступных вариантов (меню)
    cin >> a;
    switch(a){
    // ... обрабатываем команду
    }
}while(a!=0); // на всякий случай, подальше от вечного цикла
я конешно могу все собрать, мне не трудно.
1
0 / 0 / 0
Регистрация: 27.05.2021
Сообщений: 20
02.09.2021, 20:04  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
я конечно могу все собрать, мне не трудно.
Просить не могу, но это было бы очень хорошо. Посмотреть, как должно быть и разобрать для себя в целом.
0
Заблокирован
03.09.2021, 00:48
Лучший ответ Сообщение было отмечено ramiras001 как решение

Решение

Цитата Сообщение от ramiras001 Посмотреть сообщение
Просить не могу, но это было бы очень хорошо. Посмотреть, как должно быть и разобрать для себя в целом.
Скорее, один из вариантов как может быть.

Добавлено через 4 часа 19 минут
как то так ...
Кликните здесь для просмотра всего текста
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
 
// используемые классы из std
using std::string;
using std::cin; using std::cout; using std::endl;
using std::ifstream; using std::ofstream;
 
const string alphabet   = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ_.,0123456789"; // алфавит
const int    alpha_size = alphabet.size(); // размер алфавита
const int    key = 7; // ключи (смещение)
// объявления наших функций
string encode(const string& str);
string decode(const string& str);
void read(const string& filename, string& dst);
void write(const string& filename, const string& src);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    std::ios::sync_with_stdio(false);
    setlocale(LC_ALL, "Russian");
    string filename;
    string S; // строка для манипуляций
    char a = '0';
 
    do{
        cout << "Выберите действие: " << endl
             << "1 -ввод строки с клавиатуры (используя кириллицу);" << endl
             << "2 -вывод строки на экран;" << endl
             << "3 -зашифровать строку;"<< endl
             << "4 -расшифровать строку;" << endl
             << "5 -записать строку в текстовый файл;" << endl
             << "6 -считать строку из текстового файла;" << endl
             << "0 -завершить работу" << endl;
        cin >> a;
        while(cin.get() != '\n');
        switch (a) {
            case '0' : cout << "«Сеанс окончен!»";
                     return EXIT_SUCCESS;
            case '1' : cout << "Введите строку : ";
                     std::getline(cin, S);
                    break;
            case '2' : cout << "Наша строка : " << S << endl;
                    break;
            case '3' : // (S=decode(S)) - шифруем строку S, присваиваем ей зашифрованную строку, и тут же выводим на экран
                     cout << "Ваша строка зашифрована: " << (S=encode(S)) << endl;
                     cout << "****************************";
                    break;
            case '4' : // (S=decode(S)) - декодируем строку S, присваиваем ей разкодированую строку, и тут же выводим на экран
                     cout << "Ваша строка расшифрована: " << (S=decode(S)) << endl;
                     cout << "****************************";
                    break;
            case '5' : cout << "Enter file name: ";
                     std::getline(cin, filename);
                     write(filename, S);
                    break;
            case '6' : cout << "Enter file name: ";
                     std::getline(cin, filename);
                     read(filename, S);
                    break;
            default: cout << "Команда неизвестна." << endl; // введено некорректное значение
                    break;
        }
        cout << endl;
    }while(a!='0');
    return EXIT_SUCCESS;
}
 
string encode(const string& str) { //зашифровка строки (смещение на 7 позиций)
    if (str.empty()) return "";
    string res(str);
    size_t pos=0;
    for (size_t i = 0; i < str.size(); i++){
        if (str[i]==' '){
            res[i] = ' ';
            continue;
        }
        pos = alphabet.find(str[i]);
        if (pos != alphabet.npos)
            res[i] = alphabet[ (pos + key) % alpha_size ];
        else
            res[i] = str[i];
    }
    return res;
}
string decode(const string& str) { //расшифровка строки
    if (str.empty()) return "";
    string res(str);
    size_t pos = alphabet.npos;
    for (size_t i = 0; i < str.size(); i++){
        if (str[i]==' '){
            res[i] = ' ';
            continue;
        }
        pos = alphabet.find(str[i]);
        if (pos != alphabet.npos){
            if (pos >= key)
                res[i] = alphabet[ pos - key ];
            else
                res[i] = alphabet[ alpha_size + pos - key];
        }
        else
            res[i] = str[i];
    }
    return res;
}
 
void write(const string& filename, const string& src) {  // пишем строку s в файл с названием filename
    ofstream fout(filename);
    if (fout.is_open())
    {
        fout << src;
        cout << "Запись прошла успешно" << endl;
        cout << "****************************" << endl;
        return;
    }
    cout << "Ошибка записи в файл" << endl;
    cout << "****************************" << endl;
}
void read(const string& filename, string& dst) { //считать строку из файла. Результат сохраним в строку S
    ifstream fin(filename);
    if (fin.is_open())
    {
        std::getline(fin, dst);
        cout << "Строка успешно прочитана ." << endl;
        cout << "****************************" << endl;
        return; // выход из функции
    }else{
        cout << "Файл не удалось открыть !" << endl;
        cout << "****************************" << endl;
    }//
}
1
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
03.09.2021, 07:11
Цитата Сообщение от ramiras001 Посмотреть сообщение
Может кто-то сталкивался с подобными условиями?
А чё, нужно тупо выполнять условия задачи?

Напиши свою "Энигму" - хоть чуток полезную программу для шифрования/дешифрования файла:

1. Вводишь имя файла.
2. Программа проверяет расширение, если нету специального (добавленного при зашифровке) - отправляет файл на шифрование.
3. Запрашивает пароль.
4. Если специальное расширение (любое придуманное тобой) - на расшифровку.
5. Прога читает файл по байтам, зашифровывает/расшифровывает - и сбрасывает в файл.


Всё какая-то польза будет, фотки, видосы с порнушкой от жены зашифровать сможешь. Только пароль не забудь.

В своей шифровальной программе я ещё добавил дополнительный функционал - она может зашифровать и имя файла, которое при расшифровке восстанавливается. В результате файл "Военная тайна.avi" зашифруется в "urweqrhfbreqbq.fri". Пжалста, обменивайся с друзьями любыми файлами, фильмами и т.п, никто не обвинит тебя в нарушении авторских прав. Если не расшифрует твой код, конечно.
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
03.09.2021, 08:06
alexu_007,
Фотки, видосы, а так-же экзешники и прочие файлы имеющие свой формат(заголовок, устройство, разметку), еще проще испортить(зашифровать).Например В exe-шнике достаточно несколько байт поменять чтоб он стал нерабочим.
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
03.09.2021, 08:13
Возможно, только цель то зашифровать. Ну например, с точки зрения нарушения авторских прав - в зашифрованном файле и имя файла будет случайным, и в самом файле ничего не совпадать с исходным. Т.е. пока не расшифруешь - не поймёшь, что там.

Ну и для автора темы (и для меня, когда я писал такую программу) цель - научиться. А не "испортить" ехе-шник.
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
03.09.2021, 08:24
, и в самом файле ничего не совпадать с исходным.
Откуда у них исходный файл...
Ладно не хочу спорить. Молодцы конечно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2021, 08:24
Помогаю со студенческими работами здесь

Поиск нужных строк в HTML-файлах по заданному ключу и запись определённых слов из найденных строк в CSV-файл
Есть 100 файлов в папке BDVK с форматом .html Нужно сделать программу которая ищет в html файле по строкам - ключевым словам и сохраняет...

Запись строк в файл
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #define size 50 ...

Запись строк в файл
Дан строковый файл. Создать новый строковый файл, содержащий все строки исходного файла наименьшей длины (в том же порядке). И вторая...

Запись строк в файл
Дан файл.Записать в другой файл только те строки,которые начинаются с заданной буквы.

Запись строк в файл
Добрый день Имеется две строчки в неком файле Monitor Model: V193 Monitor Model: Acer V173 Необходимо записать...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru