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

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

28.05.2009, 17:46. Показов 3728. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru