С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
2 / 2 / 0
Регистрация: 06.01.2017
Сообщений: 56
1

Расшифровка файла: каждая русская буква заменяется на букву того же регистра, следующей за ней

26.06.2017, 22:43. Показов 4618. Ответов 32
Метки нет (Все метки)

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

Добрый вечер. Уважаемые программисты - профессионалы! У меня возникла сегодня такая ситуация. На экзамене по программированию(первый курс) мне достался такой билет, ниже прилагается с моим решением поставленной задачи. Проверяющий сначала счел мой код не работающим, а затем полу рабочим. Прошу дать объективную оценку и Ваши комментарии по работоспособности моего кода. Заранее спасибо.
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
// Variant10.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <windows.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
 
void coding(char *str)
{
    cout << "Coding..." << endl;
    while (*str)
    {
 
        if (*str >= 'А' && *str <= 'я')
        {
            cout << "Replacing " << *str << " -> ";
            if (*str == 'Я')
            {
                *str = 'А';
            }
            else
                if (*str == 'я')
                {
                    *str = 'а';
                }
                else
                    if (*str == 'п' && *str == 'а')
                    {
                        *str = 'р';
                        *str = 'б';
                    }
                    else
                    {
                        *str = (*str) + 1;
 
                    }
            cout << *str << endl;;
        }
 
        str++;
    }
}
 
 
 
 
void decoding(char *str)
{
    cout << "Decoding..." << endl;
    while (*str)
    {
 
        if (*str >= 'А' && *str <= 'я')
        {
            cout << "Replacing " << *str << " -> ";
            if (*str == 'А')
            {
                *str = 'Я';
            }
            else
                if (*str == 'а')
                {
                    *str = 'я';
                }
                else
                    if (*str == 'р' && *str == 'б')
                    {
                        *str = 'п';
                        *str = 'а';
                    }
                    else
                    {
                        *str = (*str) - 1;
 
                    }
            cout << *str << endl;;
        }
 
        str++;
    }
}
 
int main(int argc, char** argv)
{
 
    ifstream fileIn("text.txt");
    ofstream fileOut("text2.txt");
 
    char textBuffer[256];
 
    memset(textBuffer, 0, 256);
 
    cout << "Enter text : ";
    cin.getline(textBuffer, 256);
 
    coding(textBuffer);
    cout << textBuffer << endl;
    decoding(textBuffer);
    cout << textBuffer << endl;
    if (fileOut.is_open())
    {
        fileOut.write(textBuffer, 256);
 
    }
    fileOut.close();
    system("pause");
    return 0;
}
Миниатюры
Расшифровка файла: каждая русская буква заменяется на букву того же регистра, следующей за ней  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2017, 22:43
Ответы с готовыми решениями:

Написать программу которая реализует шифр Цезаря, т.е. каждая буква заменяется на следущую за ней по алфавиту, а последняя буква заменяется первой
Написать программу которая реализует шифр Цезаря, т.е. каждая буква заменяется на следущую за ней...

Шифрование: каждая буква, являющаяся i-й по алфавиту, заменяется на (i+2)-ю букву
Разработать программу шифровки текста из букв. Каждая буква, являющаяся i-й по алфавиту,...

Дан файл, содержащий зашифрованный русский текст. Каждая буква заменяется на следующую за ней (буква я заменяется на а)
Написать программу на языке программирования Delphi, используя тип текстовые файлы. исходные...

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

32
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
26.06.2017, 22:47 2
Текст билета нужно набрать руками и на русском.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
26.06.2017, 22:59 3

Не по теме:

Lado, что же ты сам вопрос не по русски тоже задаешь.:scratch:



Добавлено через 9 минут
Lado, у тебя функция coding не кодит.

Добавлено через 2 минуты
Lado, вроде как на первый взгляд с кодировкой проблемы?
0
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
26.06.2017, 23:02 4
Это для обнуления строки?
C++
1
memset(textBuffer, 0, 256);
0
2 / 2 / 0
Регистрация: 06.01.2017
Сообщений: 56
26.06.2017, 23:03  [ТС] 5
Задание : Создать текстовый файл, который содержит зашифрованный текст, введенный с клавиатуры. При этом каждая русская буква заменяется на букву того же регистра, следующей за ней(буква я меняется на а). Символы которые не являются русскими при шифровании не меняется. Получить в новом файле расшифровку данного текста.

Добавлено через 29 секунд
andreyananas, да
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.06.2017, 23:04 6
Цитата Сообщение от Lado Посмотреть сообщение
*str = 'п';
*str = 'а';
говнокод.
0
2 / 2 / 0
Регистрация: 06.01.2017
Сообщений: 56
26.06.2017, 23:05  [ТС] 7
Это в рабочем состоянии
Миниатюры
Расшифровка файла: каждая русская буква заменяется на букву того же регистра, следующей за ней  
0
2 / 2 / 0
Регистрация: 06.01.2017
Сообщений: 56
26.06.2017, 23:08  [ТС] 8
hoggy, Мне до этого заставили переделать. Вот как он выглядил
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
// Variant10.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <windows.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
 
void coding(char *str)
{
    cout << "Coding..." << endl;
    while (*str)
    {
 
        if (*str >= 'А' && *str <= 'я')
        {
            cout << "Replacing " << *str << " -> ";
            if (*str == 'Я')
            {
                *str = 'А';
            }
            else
                if (*str == 'я')
                {
                    *str = 'а';
                }
                else
                    if (*str == 'п')
                    {
                        *str = 'р';
                    }
                    else
                    {
                        *str = (*str) + 1;
 
                    }
            cout << *str << endl;;
        }
 
        str++;
    }
}
 
 
 
 
void decoding(char *str)
{
    cout << "Decoding..." << endl;
    while (*str)
    {
 
        if (*str >= 'А' && *str <= 'я')
        {
            cout << "Replacing " << *str << " -> ";
            if (*str == 'А')
            {
                *str = 'Я';
            }
            else
                if (*str == 'а')
                {
                    *str = 'я';
                }
                else
                    if (*str == 'р')
                    {
                        *str = 'п';
                        
                    }
                    else
                    {
                        *str = (*str) - 1;
 
                    }
            cout << *str << endl;;
        }
 
        str++;
    }
}
 
int main(int argc, char** argv)
{
 
    ifstream fileIn("text.txt");
    ofstream fileOut("text2.txt");
 
    char textBuffer[256];
 
    memset(textBuffer, 0, 256);
 
    cout << "Enter text : ";
    cin.getline(textBuffer, 256);
 
    coding(textBuffer);
    cout << textBuffer << endl;
    decoding(textBuffer);
    cout << textBuffer << endl;
    if (fileOut.is_open())
    {
        fileOut.write(textBuffer, 256);
 
    }
    fileOut.close();
    system("pause");
    return 0;
}
0
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
26.06.2017, 23:15 9
Цитата Сообщение от Lado Посмотреть сообщение
Создать текстовый файл, который содержит зашифрованный текст, введенный с клавиатуры.
Этого этапа в реализации попросту нету. То есть, нету даже попытки его реализовать. Либо мне повылазило.


Цитата Сообщение от Lado Посмотреть сообщение
Это в рабочем состоянии
Безпонятия как у вас там шифруется, но вот, что вышло у меня:
Миниатюры
Расшифровка файла: каждая русская буква заменяется на букву того же регистра, следующей за ней  
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
26.06.2017, 23:17 10
Lado,
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
// Variant10.cpp: определяет точку входа для консольного приложения.
//
 
#include <iostream>
#include <fstream>
#include <windows.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
 
void coding(char *str)
{
    cout << "Coding..." << endl;
    while (*str)
    {
 
        if (*str >= 'А' && *str <= 'я')
        {
            cout << "Replacing " << *str << " -> ";
            if (*str == 'Я')
            {
                *str = 'А';
            }
            else
                if (*str == 'я')
                {
                    *str = 'а';
                }
                else
                    if (*str == 'п' && *str == 'а')
                    {
                        *str = 'р';
                        *str = 'б';
                    }
                    else
                    {
                        *str = (*str) + 1;
 
                    }
            cout << *str << endl;;
        }
 
        str++;
    }
}
 
void decoding(char *str)
{
    cout << "Decoding..." << endl;
    while (*str)
    {
 
        if (*str >= 'А' && *str <= 'я')
        {
            cout << "Replacing " << *str << " -> ";
            if (*str == 'А')
            {
                *str = 'Я';
            }
            else
                if (*str == 'а')
                {
                    *str = 'я';
                }
                else
                    if (*str == 'р' && *str == 'б')
                    {
                        *str = 'п';
                        *str = 'а';
                    }
                    else
                    {
                        *str = (*str) - 1;
 
                    }
            cout << *str << endl;;
        }
 
        str++;
    }
}
 
int main(int argc, char* argv[] )
{
    setlocale(LC_ALL, "Russian");
    ofstream fileOut("text.txt");
 
    char textBuffer[256];
    memset(textBuffer, 0, 256);
 
    cout << "Enter text : ";
    cin.getline(textBuffer, 256);
 
    if (fileOut.is_open())
    {
        fileOut.write(textBuffer, 256);
    }
 
    coding(textBuffer);
    cout << textBuffer << endl;
    decoding(textBuffer);
    cout << textBuffer << endl;
 
    fileOut.close();
    system("pause");
 
    return 0;
}
0
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
26.06.2017, 23:19 11
C++
1
2
3
4
5
6
    if (fileOut.is_open())
    {
        fileOut.write(textBuffer, 256);
 
    }
    fileOut.close(); // Вы закрываете файл, который может быть не открытым!
0
2 / 2 / 0
Регистрация: 06.01.2017
Сообщений: 56
26.06.2017, 23:21  [ТС] 12
andreyananas, Не знаю у меня работает. только что проверил. У меня на экзамене та же ситуация была. Проверяющий сказал, что нужно setlocale добавить и сторонний заголовочный файл и что-то еще прописать но он так и не сказал что. Мне бы знать в целом как код
Миниатюры
Расшифровка файла: каждая русская буква заменяется на букву того же регистра, следующей за ней  
0
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
26.06.2017, 23:28 13
Цитата Сообщение от Lado Посмотреть сообщение
Мне бы знать в целом как код
Ну вот как минимум записи в файл зашифрованного текста нету.
0
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
26.06.2017, 23:46 14
Как ты можешь видеть, зашифровалось только три буквы (на этот раз запускал на VS2015).
В итоге мы имеем:
1. Шифровка почти не работает (либо я не понял, что именно должно шифроваться).
2. Нету записи зашифрованного текста в созданный файл.

То есть: приложение даже частично не работает.
Миниатюры
Расшифровка файла: каждая русская буква заменяется на букву того же регистра, следующей за ней  
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.06.2017, 23:55 15
Цитата Сообщение от Lado Посмотреть сообщение
Проверяющий сказал, что нужно setlocale добавить и сторонний заголовочный файл и что-то еще прописать но он так и не сказал что.
Скорее всего
C++
1
2
3
#include <windows.h>
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Добавлено через 2 минуты
Цитата Сообщение от Lado Посмотреть сообщение
При этом каждая русская буква заменяется на букву того же регистра, следующей за ней(буква я меняется на а).
В таких заданиях важно знать кодировку.
0
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
27.06.2017, 00:07 16
Лучший ответ Сообщение было отмечено Lado как решение

Решение

Как-то так:
Кликните здесь для просмотра всего текста
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
// Variant10.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <windows.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
 
void coding(char *str)
{
    cout << "Coding..." << endl;
    while (*str)
    {
 
        if (*str >= 'А' && *str <= 'я')
        {
            cout << "Replacing " << *str << " -> ";
            if (*str == 'Я')
            {
                *str = 'А';
            }
            else
                if (*str == 'я')
                {
                    *str = 'а';
                }
                else
                    if (*str == 'п' && *str == 'а')
                    {
                        *str = 'р';
                        *str = 'б';
                    }
                    else
                    {
                        *str = (*str) + 1;
 
                    }
            cout << *str << endl;;
        }
 
        str++;
    }
}
 
 
 
 
void decoding(char *str)
{
    cout << "Decoding..." << endl;
    while (*str)
    {
 
        if (*str >= 'А' && *str <= 'я')
        {
            cout << "Replacing " << *str << " -> ";
            if (*str == 'А')
            {
                *str = 'Я';
            }
            else
                if (*str == 'а')
                {
                    *str = 'я';
                }
                else
                    if (*str == 'р' && *str == 'б')
                    {
                        *str = 'п';
                        *str = 'а';
                    }
                    else
                    {
                        *str = (*str) - 1;
 
                    }
            cout << *str << endl;;
        }
 
        str++;
    }
}
 
int main(int argc, char** argv)
{
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
   
    char textBuffer[256];
    memset(textBuffer, 0, 256);
 
    cout << "Enter text : ";
    cin.getline(textBuffer, 256);
 
    coding(textBuffer);
    cout << textBuffer << endl;
    ofstream fout("text.txt");
    if (fout.is_open())
    {
        fout << textBuffer << endl;
        fout.close();
    }
 
    fout.open("text2.txt");
    decoding(textBuffer);
    cout << textBuffer << endl;
    if (fout.is_open())
    {
        fout.write(textBuffer, 256);
        fout.close();
    }
 
    return 0;
}
1
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
27.06.2017, 00:57 17
Lado, Зачем же так жестко по-черному говносорсить...
0
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
27.06.2017, 01:34 18
Цитата Сообщение от zarko97 Посмотреть сообщение
Зачем же так жестко по-черному говносорсить...
Я вот не очень понимаю смысл таких комментариев.
1. Человек объяснил, что он на 1 курсе.
2. Человек спрашивает "что не так?", в ответ... говнокод. Так покажите на примере как надо или схематично опешите.
0
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
27.06.2017, 13:23 19
andreyananas, да не вопрос:
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
struct IsChanges : public std::unary_function<char, char>
{
    const char operator()(const char ch)
    {
        return (IsRusSymb(ch)) ? ((std::islower(ch)) ? replace(ch) : replace(std::isupper(ch))) : ch;
    }
 
private:
    const char replace(const char ch)
    {
        std::string::size_type new_pos = alpha.find_first_of(std::islower(ch));
        if (new_pos == 0) return alpha.back();
        else if (new_pos == alpha.size() - 1) return alpha.front();
        return alpha[new_pos--];
    }
 
    const bool IsRusSymb(const char ch) const
    {
        return ch >= 'А' && ch <= 'я';
    }
};
 
int main()
{
    std::ifstream is("in.txt");
    std::ofstream os("out.txt");
 
    std::string str((std::istreambuf_iterator<char>(is)), std::istreambuf_iterator<char>());
    std::transform(str.begin(), str.end(), str.begin(), IsChanges());
    std::move(str.begin(), str.end(), std::ostreambuf_iterator<char>(os));
 
    system("pause");
    return 0;
}
Добавлено через 2 минуты
andreyananas, 30 vs 120. Размер имеет значение
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.06.2017, 13:24 20
Цитата Сообщение от andreyananas Посмотреть сообщение
схематично опешите
1. устар. неперех. Лишиться лошади (о всаднике).
2. устар. перех. Лишить всадника лошади.
3. перен. разг. неперех. Прийти в замешательство от неожиданности, удивления, испуга и т.п.; растеряться.
http://tolkslovar.ru/o4788.html
1
27.06.2017, 13:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2017, 13:24
Помогаю со студенческими работами здесь

Каждая буква заменяется на следующую за ней по алфавиту
Дана строка текста на английском языке. Зашифровать строку по правилу: каждая буква заменяется на...

Каждую букву заменить на следующую за ней (буква я заменяется на а)
Каждая буква заменяется на следующую за ней (буква я заменяется на а). Используйте в задачах два...

Дан файл, содержащий зашифрованный русский текст, Каждая буква заменяет на следующий за ней , буква" я" заменяется на "а"
Дан файл, содержащий зашифрованный русский текст, Каждая буква заменяет на следующий за ней ,...

Каждая цифра во введённой строке заменяется следующей по порядку, а 9 на 0
Помогите, пожалуйста, написать функцию, которая в строке каждую цифру заменяет на следующую за ней...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru