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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
sanya04
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 22
#1

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

25.06.2013, 13:12. Просмотров 1109. Ответов 10
Метки нет (Все метки)

. Чтобы зашифровать текст, записанный с помощью русских букв и знаков препинания, его можно переписать, заменив каждую букву непосредственно следующей за ней по алфавиту (буква «Я» заменяется на «А»). Дан текстовый файл f. Зашифровать данный текст и записать в файл g.
алгоритм решения задачи обработки данных, хранящихся в текстовом файле.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iv-a
15 / 15 / 0
Регистрация: 25.06.2013
Сообщений: 63
25.06.2013, 14:56     Зашифровать текст #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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    setlocale(0, "");
    
    ifstream f("f");
    ofstream g("g");
    string line;
 
    if (!f || !g)
    {
        cout << "Error!" << endl;
        system("pause");
        return 1;
    }
 
    while (!f.eof())
    {
        getline(f, line);
        int size = line.size();
        
        for (int i = 0; i < size; i++)
        {
            if (line[i] == 'я') line[i] = 'а';
            else if (line[i] == 'Я') line[i] = 'А';
            else line[i] = line[i] + 1;
        }
 
        g << line;
    }
 
    f.close();
    g.close();
    return 0;
}
sanya04
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 22
25.06.2013, 15:21  [ТС]     Зашифровать текст #3
выводит консоль после операции и в нем написано ERROR.
iv-a
15 / 15 / 0
Регистрация: 25.06.2013
Сообщений: 63
25.06.2013, 15:25     Зашифровать текст #4
Цитата Сообщение от sanya04 Посмотреть сообщение
выводит консоль после операции и в нем написано ERROR.
создайте файл f, положите его в тот же каталог вместе с программой и что-нибудь напишите в нем
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 15:42     Зашифровать текст #5
все хорошо, только вот маленькие русские буквы в ASCII не стоят подряд

у буквы п код 175, а у р - уже 224
iv-a
15 / 15 / 0
Регистрация: 25.06.2013
Сообщений: 63
25.06.2013, 15:42     Зашифровать текст #6
Цитата Сообщение от Thinker Посмотреть сообщение
все хорошо, только вот русские буквы в ASCII не стоят подряд
только одна буква выходит из этого правила - Ё. все остальные на месте
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 15:44     Зашифровать текст #7
Цитата Сообщение от iv-a Посмотреть сообщение
только одна буква выходит из этого правила - Ё. все остальные на месте
я про маленькие русские буквы, у них разрыв имеется
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.06.2013, 20:30     Зашифровать текст #8
@Thinker, всё там на месте, кроме ё Ё
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
int main()
{
    setlocale(LC_CTYPE, "");
    for (int i = 192; i != 256; ++i)
        std::cout << i << ": "
            << static_cast<unsigned char>(i) << std::endl;
    return 0;
}
Миниатюры
Зашифровать текст  
Thinker
Эксперт C++
4220 / 2194 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.06.2013, 21:33     Зашифровать текст #9
Цитата Сообщение от Olivеr Посмотреть сообщение
@Thinker, всё там на месте, кроме ё Ё
альтернативных кодировок несколько: ISO 8859-5, CP866, 1251, ГОСТ КОИ-8, 10007 и т.д.
Речь шла о СР866. Да, ее почти вытеснили другие кодировки, согласен. увидев алгоритм, как то о ней сразу почему-то подумал.
sanya04
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 22
25.06.2013, 23:15  [ТС]     Зашифровать текст #10
А как написать эту программу с помощью функций??

Добавлено через 1 час 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
137
138
139
140
141
142
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdlib.h>
using namespace std;
 
 
void create_file(char *namef,fstream &f)
{ 
    char st[80],s1[5];
    
    f.open(namef,ios::out);
 
    if (!f.is_open())
    {
        cout<<"ERROR"; 
        exit(1);
    }
 
    if(f.eof())
    {
        f.clear();
        f.seekg(0);
    }
 
    while (cin.get()!='\n') continue;
 
    cout << "Для завершения ввода нажмите * enter" <<endl;
 
    cin.getline(st,80);
 
    while (st[0]!='*')
    {
        f<<st<<endl;
        cin.getline(st,80);
            
    }
 
    f.close();
}
void read_file(char *namef,fstream &f)
{
    char st[80];
 
    f.open(namef,ios::in);
 
    if (!f.is_open())
    {
        cout<<"ERROR"; 
        exit(1);
    }
 
    if(f.eof())
    {
        f.clear();
        f.seekg(0);
    }   
    
    while (!f.eof())
    {
        f.getline(st,80);
        cout<<st<<"("<<strlen(st)<<")"<<endl;
    }
 
    f.close();
}
 
void zamen(char *namef,fstream &f,char *nameg,fstream &g)
{
    
    f.open(namef,ios::in);
    g.open(nameg,ios::binary|ios::out);
    char st[40];
    char *st1;
    st1=new char[40];
    int i=0,k=0,n;
    if (!f.is_open())
    {
        cout<<"ERROR";exit(1);
    }
    if (f.eof())
    {
    f.clear();
    f.seekg(0);
    }
    if(!g.is_open())
    {
    cout<<"ERROR";exit(1);
    }
    if(g.eof())
    {
    g.clear();
    g.seekg(0);
    }
     while (!f.eof())
    {
        f.getline(st,40);
        n=strlen(st);
        delete[] st1;
        st1=new char[n];
        st1[0]='\0';
        k=0;
 
        getline(f, line);
        int size = line.size();
        
        for (int i = 0; i < size; i++)
        {
            if (line[i] == 'я') line[i] = 'а';
            else if (line[i] == 'Я') line[i] = 'А';
            else line[i] = line[i] + 1;
        }
 
        g << line;
    }
      f.close();
    g.close();
}
 
 
 
 
 
void main()\
{
    setlocale(LC_ALL,"RUSSIAN");
    fstream f,g;
    char *namef;
    namef=new char[15];
    char *nameg;
    nameg =new char[15];
    
    cout<<"Enter name of the file ";
    cin>>namef;
    create_file(namef,f);
    read_file(namef,f);
    cout<<"Enter name of the new file ";
    cin>>nameg;
    zamen(namef,f,nameg,g);
    read_file(nameg,g);
}
как исправить функцию zamen c программы которая была предоставлена выше?
Заранее спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2013, 12:10     Зашифровать текст
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
FraidZZ
Модератор
3896 / 1522 / 229
Регистрация: 06.01.2013
Сообщений: 4,049
Завершенные тесты: 1
26.06.2013, 12:10     Зашифровать текст #11
Вообще функцию замены можно сделать так, но я не уверен про кодировки, синтаксис, да и вообще давно не кодил =D
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char * zamen(char *in){
 setlocale(0, "");
 char alphabet[]="абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
 int i=0;
 bool r=false;
 while(in[i] != "\0") i++;
 char *s; s = new char[i];
 for (int n = 0; n < i; n++){
  r = false;
  for (int m = 0; m < 65; m++){
   if (in[n] == alphabet[m]){s[n]=alphabet[m+1]; r = true;}
  }
  if(!r) s[n]=in[n];
 }
 return s;
}
Yandex
Объявления
26.06.2013, 12:10     Зашифровать текст
Ответ Создать тему
Опции темы

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