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

Текст не шифруется

18.06.2025, 19:54. Показов 3399. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пишу небольшой КП, программа написана, но не могу понять почему текст не шифруется (в файл просто записывается исходный текст без изменений).

Задание: Пусть первые 10 согласных букв русского алфавита заменяются на со
ответствующие гласные, а остальные в соответствии с таблицей
Б В Г Д Ж З К Л М Н П Р С Т Ф
А Е Ё И О У Ы Э Ю Я Щ Ш Ч Ц Х
Пользуясь изложенным способом создать программу, которая:
А) зашифрует введенный текст и сохранит его в файл,
Б) считает зашифрованный текст из файла и расшифрует данный текст.
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
string encrypt(const string& text) {
    string result = "";
    string consonants = "БВГДЖЗКЛМНПРСТФ";
    string vowels = "АЕЁИОУЫЭЮЯЩШЧЦХ";
    for (char c : text) {
        char lower_c = tolower(c);
        size_t pos = consonants.find(toupper(c));
 
        if (pos != string::npos && pos < 10) {
            result += (islower(c) ? tolower(vowels[pos]) : vowels[pos]);
        } else if (pos != string::npos) {
            result += (islower(c) ? tolower(vowels[pos]) : vowels[pos]);
        } else if (isalpha(c)) {
            result += c;
        }
        else {
            result += c;
        }
    }
    return result;
}
 
string decrypt(const string& text) {
    string result = "";
    string consonants = "БВГДЖЗКЛМНПРСТФ";
    string vowels = "АЕЁИОУЫЭЮЯЩШЧЦХ";
    for (char c : text) {
        char lower_c = tolower(c);
 
        size_t pos = vowels.find(toupper(c));
 
        if (pos != string::npos) {
            result += (islower(c) ? tolower(consonants[pos]) : consonants[pos]);
        } else if (isalpha(c)) {
            result += c;
        }
        else {
            result += c;
        }
    }
    return result;
}
 
int main() {
    system ("chcp 1251");
    int choice;
    cout << "Выберите действие:" << endl;
    cout << "1 - Зашифровать текст и записать в файл" << endl;
    cout << "2 - Считать зашифрованный текст из файла и расшифровать" << endl;
    cout << "Ваш выбор: ";
    cin >> choice;
    cin.ignore();
    if (choice == 1) {
        string inputText;
        cout << "Введите текст для шифрования: ";
        getline(cin, inputText);
        string encryptedText = encrypt(inputText);
        ofstream outputFile("encrypted.txt");
        if (outputFile.is_open()) {
            outputFile << encryptedText;
            outputFile.close();
            cout << "Текст зашифрован и сохранен в файл encrypted.txt" << endl;
        } else {
            cerr << "Не удалось открыть файл для записи." << endl;
            return 1;
        }
    } else if (choice == 2) {
        string decryptedText;
        ifstream inputFile("encrypted.txt");
        if (inputFile.is_open()) {
            getline(inputFile, decryptedText);
            inputFile.close();
            string decryptedTextResult = decrypt(decryptedText);
            cout << "Расшифрованный текст: " << decryptedTextResult << endl;
 
        } else {
            cerr << "Не удалось открыть файл для чтения." << endl;
            return 1;
        }
    } else {
        cout << "Некорректный выбор." << endl;
    }
    return 0;
}
1.txt - текстовик с моими наработками.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2025, 19:54
Ответы с готовыми решениями:

Преобразование текст -> двоичный код -> текст
// praci5.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot;...

Отформатировать текст так, чтобы его ширина не превосходила N позиций, и выровнять текст по правому краю
Дано целое число N и текстовый файл с именем Name1, содержащий один абзац текста, выровненный по...

Подскажите. Не компилирует текст программы, запрашивает в коде мол не достающую скобку. Ниже приведен текст программы.
#include &lt;iostream.h&gt; unsigned int perimetr ( int a,int b); int main() { int a,b; cin &gt;&gt; a;...

12
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,176
18.06.2025, 20:36
Цитата Сообщение от Atya Посмотреть сообщение
не могу понять почему текст не шифруется (в файл просто записывается исходный текст без изменений)
покаж кот.
Негросеть писала, да?
0
0 / 0 / 0
Регистрация: 18.11.2024
Сообщений: 4
18.06.2025, 20:47  [ТС]
код прикреплён.

Добавлено через 8 минут
частично, я не мог въехать в саму суть этой шифровки
0
Модератор
Эксперт С++
 Аватар для zss
13765 / 10960 / 6489
Регистрация: 18.12.2011
Сообщений: 29,233
18.06.2025, 20:50
Atya,
1. если в исходном тексте были буквы Щ Ш Ч Ц Х или гласные,
то как понять в закодированном тексте, что их не надо менять?

2. Чтобы tolower toupper работали правильно нужно включить русскую локаль
C++
1
setlocale(LC_ALL,"Rus");
1
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,176
18.06.2025, 20:52
Цитата Сообщение от Atya Посмотреть сообщение
частично
Мне-то не гони.
Цитата Сообщение от Atya Посмотреть сообщение
я не мог въехать в саму суть этой шифровки
Я тоже.
0
0 / 0 / 0
Регистрация: 18.11.2024
Сообщений: 4
18.06.2025, 21:04  [ТС]
В этом суть, препод дал задание и сказал, что меняется в любом случае в соответствии с таблицей. Нейронка тоже не помогла, ни толкового объяснения, ни кода.
Как я понял нужно просто поменять буквы в верхнем и нижнем рядах местами, как на шифровке, так и на дешифровке.

Добавлено через 10 минут
Спасибо, никогда не сталкивался, всегда работал на линуксе или использовал chcp 1251.
Но теперь он неверно дешифрует.
0
Модератор
Эксперт С++
 Аватар для zss
13765 / 10960 / 6489
Регистрация: 18.12.2011
Сообщений: 29,233
18.06.2025, 21:28
Лучший ответ Сообщение было отмечено Atya как решение

Решение

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
#include <iostream>
#include <fstream>
#include <string>
//#include <vector>
//#include <algorithm>
 
using namespace std;
 
string encrypt_decript(const string& text) 
{
    const string consonants = "БВГДЖЗКЛМНПРСТФбвгджзклмнпрстф";
    const string  vowels = "АЕЁИОУЫЭЮЯЩШЧЦХаеёиоуыэюящшчцх";
    string result = "";
    for(size_t i=0;i<text.size();++i)
    {
        char c = text[i];
        size_t pos = consonants.find(c);
        if (pos != string::npos)
            result += vowels[pos];
        else
        {
            pos = vowels.find(c);
            if (pos != string::npos)
                result += consonants[pos];
            else
                result += c;
        }
    }
    return result;
}
 
 
int main() {
    system ("chcp 1251 > NUL");
    int choice;
    cout << "Выберите действие:" << endl;
    cout << "1 - Зашифровать текст и записать в файл" << endl;
    cout << "2 - Считать зашифрованный текст из файла и расшифровать" << endl;
    cout << "Ваш выбор: ";
    cin >> choice;
    cin.ignore();
    if (choice == 1) {
        string inputText;
        cout << "Введите текст для шифрования: ";
        getline(cin, inputText);
        string encryptedText = encrypt_decript(inputText);
        ofstream outputFile("encrypted.txt");
        if (outputFile.is_open()) {
            outputFile << encryptedText;
            outputFile.close();
            cout << "Текст зашифрован и сохранен в файл encrypted.txt" << endl;
        } else {
            cerr << "Не удалось открыть файл для записи." << endl;
            cin.get();
            return 1;
        }
    } else if (choice == 2) {
        string decryptedText;
        ifstream inputFile("encrypted.txt");
        if (inputFile.is_open()) {
            getline(inputFile, decryptedText);
            inputFile.close();
            string decryptedTextResult = encrypt_decript(decryptedText);
            cout << "Расшифрованный текст: " << decryptedTextResult << endl;
 
        } else {
            cerr << "Не удалось открыть файл для чтения." << endl;
            cin.get();
            return 1;
        }
    } else {
        cout << "Некорректный выбор." << endl;
    }
    cin.get();
    return 0;
}
1
Заблокирован
18.06.2025, 21:28
Цитата Сообщение от Atya Посмотреть сообщение
Как я понял нужно просто поменять буквы в верхнем и нижнем рядах местами
Реверс?
=)
И что мешает?
0
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,176
18.06.2025, 21:37
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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
static const string ENC = "БВГДЖЗКЛМНПРСТФбвгджзклмнпрстф"; 
static const string DEC = "АЕЁИОУЫЭЮЯЩШЧЦХаеёиоуыэюящшчцх"; 
 
string encrypt(const string& text) 
{
  string result = "";
  size_t pos;
 
  for (char c : text) 
  {
    pos = ENC.find(c);
    if (pos != string::npos) { result += DEC[pos]; continue; }
    
    pos = DEC.find(c);
    if (pos != string::npos) { result += ENC[pos]; continue; }
    
    result += c;
  }
  
  printf("# %s\n", result.c_str()); // Шоб видеть на экране, чо получилося
  return result;
}
 
int main() 
{
  system ("chcp 1251 && cls");
  int choice;
  cout << "Выберите действие:" << endl;
  cout << "1 - Зашифровать текст и записать в файл" << endl;
  cout << "2 - Считать зашифрованный текст из файла и расшифровать" << endl;
  cout << "Ваш выбор: ";
  cin >> choice;
  cin.ignore();
  
  switch (choice)
  {
    case 1:
    {  
      string inputText;
      cout << "Введите текст для шифрования: ";
      getline(cin, inputText);
      string encryptedText = encrypt(inputText);
      ofstream outputFile("encrypted.txt");
      
      if (outputFile.is_open()) 
      {
        outputFile << encryptedText;
        outputFile.close();
        cout << "Текст зашифрован и сохранен в файл encrypted.txt" << endl;
      } 
      else 
      {
        cerr << "Не удалось открыть файл для записи." << endl;
        return 1;
      }
    } 
    break;
    
    case 2:
    {  
      string decryptedText;
      ifstream inputFile("encrypted.txt");
      
      if (inputFile.is_open()) 
      {
        getline(inputFile, decryptedText);
        inputFile.close();
        string decryptedTextResult = encrypt(decryptedText);
        cout << "Расшифрованный текст: " << decryptedTextResult << endl;
      } 
      else 
      {
        cerr << "Не удалось открыть файл для чтения." << endl;
        return 1;
      }  
    }
    break;
    
    default: cout << "Некорректный выбор." << endl;
  }
 
  return 0;
}
1
 Аватар для Наталья8
518 / 368 / 65
Регистрация: 09.03.2016
Сообщений: 3,865
19.06.2025, 01:12
КЛМНЁПРСТ
0
 Аватар для vlisp
1059 / 980 / 153
Регистрация: 10.08.2015
Сообщений: 5,314
19.06.2025, 17:45
Цитата Сообщение от Наталья8 Посмотреть сообщение
КЛМНЁПРСТ
рукалицо... виндоватые отпрыски с профдеформацией от идиотов так сказать преподов. хочется насилия от дремучести нынешних, не знающих ничего о комстроке в частности и ДОС в целом...
что делать, если рука тянется к розгам?
0
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,176
19.06.2025, 17:53
Цитата Сообщение от vlisp Посмотреть сообщение
рукалицо... виндоватые отпрыски с профдеформацией от идиотов так сказать преподов. хочется насилия от дремучести нынешних, не знающих ничего о комстроке в частности и ДОС в целом...
что делать, если рука тянется к розгам?
А шо не так?

0
Заблокирован
19.06.2025, 18:31
Цитата Сообщение от vlisp Посмотреть сообщение
не знающих ничего о комстроке
Это по твоему единственный достойный способ ввода?
А что про DOS знать то? - «640 Кб должно быть достаточно для каждого»
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.06.2025, 18:31
Помогаю со студенческими работами здесь

Дан текст программы на С++...Записать в выходной файл текст программы без комментариев
( структуры и текстовые файлы)– Чтение данных в массив структур должно производиться из входного...

пдскажите функцию которая выводит русский текст на экран и его заголовочный файл с++ но не system ( " echo текст " );
пдскажите функцию которая выводит русский текст на экран и его заголовочный файл с++ но не system (...

Дан текст и некоторые два слова. Определить, сколько раз они входят в текст и...
Дан текст и некоторые два слова. Определить, сколько раз они входят в текст и сколько раз они...

Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами
Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же...

Как правильно считать текст из файла? Весь текст, со всеми знаками, пробелами
подскажите, чет затупил как правильно считать текст из файла(весь текст со всеми знаками пробелами...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru