Всем привет, вообщем есть такая задача: есть текст НЕ_СЛЕДУЕТ_ВЫБИРАТЬ_НЕСЛУЧАЙНЫЙ_КЛЮЧ, его нужно разбить по 4 символа, Разобьем исходный текст на блоки по 4 символа: НЕ_С ЛЕДУ ЕТ_В ЫБИР АТЬ_ НЕСЛ УЧАЙ НЫЙ_ КЛЮЧ. Кто знает как реализовать? Вот мой код:. Проблема состоит в том, что я просто заменяю каждый четвертый символ на пробел...а как реализовать сдвиг не знаю. #include <iostream> using namespace std; void main(){ char buf[]="Ne_Sleduet_Vibirat_sluchayniu_clu4"; char key[]="Keys"; int key_size=strlen(key); int buf_size=strlen(buf); for(int i=4;i<buf_size;i=i+4){ buf=' '; } for( i=0;i<buf_size;i++){ cout<<buf; } }
И 4й символ опять заменится на пробел? А мне символы заменять не нужно мне нужно, мне нада текст разбить по 4 символа без потери.
при чем тут "заменится"? ты побайтно считал и сохранил 4 символа, далее сохранил пробел, опять считал 4 символа, далее сохранил пробел, итд в чем сложность, я не вижу.
А как считать по байтно? Есть какая, то функция? Я в с++ еще только начинающий и многое не знаю. Буду очень рад помощи.
А, Я в с++ ваще "дуб". Но, как мне кажеться, что у функции есть параметр который указывает сколько байт читать из файла. Вот он = 4. Считал в буфер. Записал " ". И опять читаешь 4 байта и опять " ".
zoolus оно? Код (Text): #include <iostream> #include <string> int main(){ std::string src = std::string("Ne_Sleduet_Vibirat_sluchayniu_clu4"); const int src_len = src.length(); std::string dst = std::string("", src_len + src_len/4); int k = 0; for (int i =0; i < src.length(); ++i){ if (i>0 && i % 4 == 0){ dst[k++] = ' '; } dst[k++] = src[i]; } std::cout << "src: " << src << std::endl; std::cout << "dst: " << dst << std::endl; return 0; }
А теперь такой вопрос, а можно этот текст как-то обратно восстановить? Произвести обратные действия..
/offtop А я недавно скачал из инета файл в котором не оказалось нужной инфы теперь ломаю голову - как закачать его обратно где взял ))
Просто разбиения текста на блоки, это один из шагов аллгоритма кодирования, а теперь для декодирования естественно текст нужно восстановить.
zoolus ну это понятно что сложного? выше код я запостил. немножко подумай как его изменить для обратных действий.
zoolus Нужно не бояться думать и экспериментировать , не всё же время varnie за тебя это делать будет Пробуй компилить все мысли какакие приходят тебе в голову, с n-ой попытки получится
Ты копируеш данные из массива src, в dst[k++], но в массиве src лежит исходный , нормальный текст. Толку? Нужно создать доп.массив и в него копировать данные из dst. Твое условие для такого случая не подходит. В твоем коде ты просто перезаписываеш массив dst исходным текстом из src?
zoolus Y_Mur написал правильно. ну еще 'i>0 &&' можно опустить. Ну и для понятности, переименовать куски 'dst..' в 'src..' и наоборот, кроме объяв. PS иногда полезно немного думать перед тем как посты постить
_basmp_ Да скопипастил из #8 не особо вникая, а ещё другим советы "надо думать" даю ) Но и ты не прав правильно (i==0 || i % 5 != 0), а то нулевой символ не скопируется