Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/19: Рейтинг темы: голосов - 19, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 19.10.2016
Сообщений: 2

Разбиение текста на блоки.

28.05.2009, 17:46. Показов 3695. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вкратце: задание по криптографии - написать программу шифрования / дешифрования сети Фейстеля с четырьмя ветвями.

Текст, считываемый из файла, разбивается на 4 равных блока и дальше с полученными блоками уже выполняются операции.

Так вот, пусть текст будет заданной длины в 512 символов.
Я хотел разбить весь текст на 4 массива по 128 символов каждый.
Попытался сделать следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FILE * OpenTextFile;
char BuferFrom[ 514 ];
 
OpenTextFile = fopen ( "OT.txt", "rb" );
fgets( BuferFrom, 513, OpenTextFile );
char *Part1, *Part2, *Part3, *Part4;
char Block1[ 129 ], Block2[ 129 ], Block3[ 129 ], Block4[ 129 ];
 
 
Part1 = Part2 = Part3 = Part4 = BuferFrom;
Part1 = Part1 + 0;
Part2 = Part2 + 128;
Part3 = Part3 + 256;
Part4 = Part4 + 384;
strncpy( Block1, Part1, 128 );
strncpy( Block2, Part2, 128 );
strncpy( Block3, Part3, 128 );
strncpy( Block4, Part4, 128 );
И в итоге получилось, что только Block3 и Block4 содержат нужное, т.е. 128, символов.
Остальные блоки по 260+.
Если функции strncpy явно указано, что она должна копировать только 128 символов, почему она копирует больше?
Может быть можно как-то более "эффектно" это сделать?
И ещё: когда записываю один из блоков в файл, то в конце появляются крокозябры. Что это?
Это значит, что в массиве не указан символ конца строки '\0'?

P.S.: Из-за того, что курсовую сдавать надо в ближайшее время, не было времени толком во всё вникать.
P.S.S.: Да, да, как и все студенты, всё делаю в последнии дни=)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2009, 17:46
Ответы с готовыми решениями:

Разбиение на блоки в StringGrid
Подскажите пожалуйста как можно разбить в StringGrid табличку, допустим 10x10 забитую какими либо цифрами, на блоки допустим 2 на 2, так...

Разбиение текста на предложения
Здравствуйте. Есть текст: Как мне разбить его на предложения? Я сделал так: Tmp->StrictDelimiter = true; ...

Разбиение на блоки текста
пишу прогу для шифрования по протоколу rsa. Дошел до самого процесса шифрования текста. Но не понимаю как разбивать текст а потом при...

9
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
30.05.2009, 19:28
Цитата Сообщение от DarkDream Посмотреть сообщение
И в итоге получилось, что только Block3 и Block4 содержат нужное, т.е. 128, символов.
Остальные блоки по 260+.
откуда такие сведения? ты ж памяти выделяешь ровно 129 байт. так откуда размер блока стал больше, чем ему выделено памяти?
memcpy- тож функция неплохая. тут уже нет привязки к строкам.
0
 Аватар для QenT
40 / 40 / 8
Регистрация: 29.01.2009
Сообщений: 244
31.05.2009, 03:24
сохранил 128 в каждый блок, а выводишь скорее всего пока не встретится \0
попробуй в конце прописать, как вариант:

C++
1
2
3
4
Block1[128]='\0';
Block2[128]='\0';
Block3[128]='\0';
Block4[128]='\0';
0
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
31.05.2009, 11:05
все-таки копировать надобно функцией memcpy.
и не работай с зашифованным текстом как с строками. была подобная проблема. то есть иногда получалось, что i-й символ в результате шифрования стал нулем или еще каким служебным символом- и каюк строке!
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
31.05.2009, 14:37
QenT всё правильно написал. При копировании через strncpy у тебя скопируется 128 байт, но если ты хочшь с полцченным массивом работать как со строкой, то тебе принудительно нужно влепить 0 в конец, потому как strncpy этого не делает (почитай документацию)

radiohobbyt, для студента, который только-только начал программировать (и которому это программирование скорее всего нах не нужно), я бы не рекомендовал заморачиваться так - для него это пока слишком сложно. Работа со строками выглядит понятнее, хотя бы потому, что её можно по простому распечатать
0
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
31.05.2009, 17:06
тогда удачи. молитесь, чтобы не напороться на ноль, который с радостью укоротит вашу строку=)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
31.05.2009, 17:49
Цитата Сообщение от radiohobbyt Посмотреть сообщение
тогда удачи. молитесь, чтобы не напороться на ноль, который с радостью укоротит вашу строку=)
Насколько я понимаю - данный алгоритм разработан именно для перевода текста в текст, а потому нет особого смысла нагружать начинающих непонятными для них вещами
0
 Аватар для radiohobbyt
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
31.05.2009, 17:56
ну раз так- то согласен.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
31.05.2009, 19:31
Цитата Сообщение от radiohobbyt Посмотреть сообщение
ну раз так- то согласен.
равда автор уже 3 дня не появляется, может уже и из института выгнали
0
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
31.05.2009, 20:10
может уже и из института выгнали
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2009, 20:10
Помогаю со студенческими работами здесь

Разбиение текста на блоки
Здравствуйте! Прошу вашей помощи. Написал программу для шифра "Шифрующие таблицы с двойной перестановкой по числовому ключу". НО есть...

Разбиение текста на блоки
Всем привет! Столкнулся с такой проблемой: есть текстовый файл, в нём записи вида: ТекстТекстТекстТекст ТекстТекст ...

Разбиение строки на блоки
Всем привет, помогите пожалуйста. Надо написать программу, которая при открытии спрашивает пользователя размер блока на которые надо...

Разбиение матрицы на блоки
Здравствуйте. Имеется матрица размером 512х512. Необходимо провести дискретное косинусное преобразование. Для этого предварительно нужно...

Разбиение файла на блоки по 64 бита
Задача следующая. Необходимо открыть файл в бинарном виде. и блоками по 64 бита отдавать некой функции. Подскажите как это можно...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru