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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
valpri
0 / 0 / 0
Регистрация: 08.05.2014
Сообщений: 32
#1

Шифр цезаря на кириллице - C++

08.05.2014, 13:17. Просмотров 2547. Ответов 4
Метки нет (Все метки)

Собственно нужно написать программу, которая из текстового файла берет текст, и шифром цезаря (путем сдвига символов) шифрует текст. С Латиницей получается, с кириллицей нет.
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
#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <sstream>
#include <fstream>
 
using namespace std;
    int main()
    {
        int k;
        int shift;
        string result = "";
        setlocale(LC_CTYPE,"Russian");
        cout<<"Если хотите зашифровать свой текст нажмите 1\n";
 
        cin>>k;
        switch (k)
         {
 
        case 1:
            {setlocale(LC_CTYPE,"Russian");
            cout<<"Введите величину сдвига\n";
            cin>>shift;
            if (shift > 32)
                shift = shift % 32;
                setlocale(LC_CTYPE,"Russian");
            cout<<"Загрузка файла...\n";
            string s;
            setlocale(LC_ALL,"Russian");
            ifstream in("Текст.txt");
            getline(in,s);
            setlocale(LC_CTYPE,"Russian");
            cout<<"Текст файла: \n"<<s<<endl;
            in.close();
            for (int i = 0; i < s.length(); i++)
 
                    {
                    //Если не кирилица
                    if (((int)(s[i]) < 192)||((int)(s[i]) > 255))
                        result += s[i];
                    //Если буква является строчной
                    if (((int)(s[i]) >= 224) && ((int)(s[i]) <= 255))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) + shift > 255)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift - 32);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift);
                        }
                     //Если буква является прописной
                     if (((int)(s[i]) >= 192) && ((int)(s[i]) <= 223))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if ((int)(s[i]) + shift > 223)
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift - 32);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += (char)((int)(s[i]) + shift);
                        }
                    }
            setlocale(LC_CTYPE,"Russian");
            cout<<"Перевод окончен\n";
            setlocale(LC_CTYPE,"Russian");
            cout<<"Рузультат:\n";
            setlocale(LC_CTYPE,"Russian");
            cout<<result;
            break;
 
            }
            }
 
 
        getch();
        return 0;
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2014, 13:17     Шифр цезаря на кириллице
Посмотрите здесь:

Кириллица. Шифр Цезаря - C++
В общем, аналогичный код с латинскими буквами отлично работает, а с кириллицей выдает полную ахинею(читал, что символы кириллицы...

Шифр Цезаря - усложненный - C++
Здравствуйте - писал программу для шифра цезаря - дали задание ее улучшить, пожалуйста помогите Вот ниже задание каким образом она должна...

Шифр сдвига (Цезаря) - C++
скажите как сделать шифр в кольце 26(для латиницы), т.е. чтобы последняя буква в первую переходила int main() { ...

Шифр Цезаря полосками - C++
Нужен пример кода обязательно на С++, который будет реализовывать расшифровку шифра Цезаря с помощью метода полосок. Количество полосок...

Шифр цезаря. Кодировка - C++
Народ подскажите пожалуйста как сделать так что бы при букве &quot;z&quot; он кодировал в букву &quot;a&quot; при заданном шаге +1 например :( Программа...

Шифр Цезаря (пароль) - C++
Помогите сделать, пожалуйста. Чтобы пароль заменялся звездочками. П.5.18 Правил Запрещено размещать задания и решения в виде картинок...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,364
08.05.2014, 13:21     Шифр цезаря на кириллице #2
А что это за магические числа - 192, 224 и так далее?
valpri
0 / 0 / 0
Регистрация: 08.05.2014
Сообщений: 32
08.05.2014, 13:25  [ТС]     Шифр цезаря на кириллице #3
ASCII коды
nmcf
5275 / 4595 / 1540
Регистрация: 14.04.2014
Сообщений: 18,251
08.05.2014, 13:52     Шифр цезаря на кириллице #4
Ты не учитываешь, что char - целое со знаком, поэтому коды русских букв будут отрицательными числами. И какая кодировка у тебя используется, тоже не ясно.

Добавлено через 1 минуту
Попробуй s[i] приводить к unsigned char сначала.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2015, 21:41     Шифр цезаря на кириллице
Еще ссылки по теме:

шифр Цезаря с русским алфавитом - C++
Всем добрый вечер... мне не очень удобно просить, но у меня появилась одна поблемка... есть программа написанная на C# на Visual 2010, а...

Шифр замены(код Цезаря) - C++
Привет всем!!! Шифр замены(код Цезаря) Занумеровать алфавит исходного сообщения. Пусть m-длина алфавита сообщения; n,k-целые числа и...

Шифр Цезаря. Чтение из файла - C++
Задача заключается в том, что нужно из определенного файла достать текст и расшифровать его или зашифровать шифром Цезаря. Текст написан на...

Помогите реализовать шифр цезаря - C++
Помогите написать графическую программу, которая шифрует слова шифром Цезаря.Шифр Цезаря — один из древнейших шифров. При шифровании...

Шифр Цезаря проблемы со знаками препинания - C++
Реализую шифр цезаря, возникла проблема со знаками препинания, не выводятся как надо. Что нужно исправить? #include &lt;iostream&gt; ...

Шифрование/дешифрование текста: шифр Цезаря - C++
8. Написать программу, которая позволяет зашифровывать и расшифровывать с помощью «шифра Цезаря» сообщение, написанное на русском языке....


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

Или воспользуйтесь поиском по форуму:
Pirojok
0 / 0 / 0
Регистрация: 17.09.2014
Сообщений: 3
06.03.2015, 21:41     Шифр цезаря на кириллице #5
Можно использовать вместо setlocle SetConsoleCP(1251); SetConsoleOutputCP(1251); И подключить
#include <Windows.h>. После запуска он нарисует непонятные символ, тогда заходим в св-ва консоли и выбираем шрифт содержащий русский язык.
Yandex
Объявления
06.03.2015, 21:41     Шифр цезаря на кириллице
Ответ Создать тему
Опции темы

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