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

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

Войти
Регистрация
Восстановить пароль
 
Vero212
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 6
#1

Кодирование происходит криво - C++

21.10.2013, 23:14. Просмотров 414. Ответов 3
Метки нет (Все метки)

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

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
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include<algorithm>
 
using namespace std; //файловые потоки ввода\вывода
ifstream ft("text.txt",ios::in);
ifstream alph("alphabet.txt",ios::in);//файл с алфавитом для заполнения массивов
fstream fts("text1.txt",ios::trunc|ios::out);//файл перезаписывается
ofstream ftss("text2.txt",ios::trunc|ios::out);//файл перезаписывается
ofstream fk("key.txt",ios::trunc|ios::out);//файл перезаписывается
char a[65];
char b[65];
char c[65];
int r = 66;
void main (void)
{
srand (time(NULL));
system("cls");
for(short i=0;i<=64;i++)//заполняем массивы
{
a[i]=alph.get(); //помещаем алфавит в рабочий массив
c[i]=a[i];
b[i]=a[i]; //заполняем стацион. массив алфавитом
}
alph.close();
std::random_shuffle(a,a+65);
for(short i=0; i<=64;i++) // перемешиваем массив
{
     short m = rand()%r;
std::swap(c[i],a[m]);
fk<<c[i];
 
for (short i=m; i<=r; i++); //удаление m-го элемента
{
    a[i] = a[i+1];
r--;
}
}
fk.close();
char ch;
while (!ft.eof()) // Пока не конец файла
{
ch=ft.get(); // Чтение посимвольно из файла ft
for (short i=0;i<=64;i++)
if (ch==b[i])
fts<<a[i];
}
ft.close();
fstream fts("text1.txt",ios::in);//переопределили для чтения
while (!fts.eof()) // Пока не конец файла
{
ch=fts.get(); // Чтение посимвольно из файла fts
for (short i=0;i<=64;i++)
if (ch==a[i])
    ftss<<b[i]; 
}
fts.close();
ftss.close();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2013, 23:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Кодирование происходит криво (C++):

криво считает сумму - C++
всё, кроме подсчёта суммы, работает правильно. need help! #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #define n 10...

Криво читается бинарник - C++
Здравия желаю! #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void main() { char l=6,c=3,b; fstream...

криво считает произведение - C++
всё, кроме произведения, работает правильно #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #define n 10 int main ()...

Криво считывает из файла - C++
Ситуация такая. Есть файл base.txt, там есть номера телефонов (по 11 символов каждый), пример ниже 79372937738 79277394843 ...

Функиця криво работает - C++
не могу понять в чем дело она не выводит весь текст.Нужно чтоб фунцкия два раза вывела фразу Three blind mice и потом еще два раза See now...

Rand в матрице работает криво. - C++
Делаю программу на заполнение матрицы случайными числами, к примеру . #include &lt;iostream&gt; using namespace std; int main() { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Stella
75 / 75 / 5
Регистрация: 26.02.2013
Сообщений: 224
21.10.2013, 23:27 #2
потому что в a[m] в результате операции std::swap(c[i],a[m]); может попасть элемент, который там уже был, но вылетел.
Vero212
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 6
21.10.2013, 23:38  [ТС] #3
Как это можно исправить?

Разве этот цикл не выбрасывает элемент a[m]?

C++
1
2
3
4
5
for (short i=m; i<=r; i++); //удаление m-го элемента
{
    a[i] = a[i+1];
r--;
}
FiLF
53 / 53 / 15
Регистрация: 05.09.2013
Сообщений: 1,327
23.10.2013, 02:58 #4
Цитата Сообщение от Vero212 Посмотреть сообщение
C++
1
for (short i=m; i<=r; i++); //удаление m-го элемента { a[i] = a[i+1]; r--; } }
C++
1
2
3
4
5
6
for (short i=m; i<=r; i++); //удаление m-го элемента
{
    a[i] = a[i+1];
}
r--;
}
И начальное значение r замените на 64, чтобы не копировать мусор в Ваш массив.

Добавлено через 6 секунд
Цитата Сообщение от Vero212 Посмотреть сообщение
C++
1
for (short i=m; i<=r; i++); //удаление m-го элемента { a[i] = a[i+1]; r--; } }
C++
1
2
3
4
5
6
for (short i=m; i<=r; i++); //удаление m-го элемента
{
    a[i] = a[i+1];
}
r--;
}
И начальное значение r замените на 64, чтобы не копировать мусор в Ваш массив.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 02:58
Привет! Вот еще темы с ответами:

Потоки в винде. Работает, но криво - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;string.h&gt; using namespace std; HANDLE hMutex; ...

Криво пишет даные в файл - C++
Надо через структуры записать даные в файл. Компилюю, ввожу даные, записивает, открываю то что записал а там какието &quot;иероглифы&quot;. В чем...

Криво работает удаление пробелов из строки - C++
Нашел в нете код #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; int main() { std::string s(&quot; Test Test...

Криво заносит или кривая структура ! - C++
typedef struct{ string* item; //Имя пункта int p; //id страницы }menu_items; и в функции юзаю так: s.item += buf; cout&lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.10.2013, 02:58
Ответ Создать тему
Опции темы

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