Преобразование текста

Тема в разделе "WASM.BEGINNERS", создана пользователем zoolus, 27 сен 2008.

  1. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    Всем привет, вообщем есть такая задача: есть текст НЕ_СЛЕДУЕТ_ВЫБИРАТЬ_НЕСЛУЧАЙНЫЙ_КЛЮЧ, его нужно разбить по 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;
    }



    }
     
  2. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Делай копию по-байтно, а вместо 4 символа вставляй " ".
    Сдвигать весь текст - долго.
     
  3. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    И 4й символ опять заменится на пробел? А мне символы заменять не нужно мне нужно, мне нада текст разбить по 4 символа без потери.
     
  4. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    при чем тут "заменится"? ты побайтно считал и сохранил 4 символа, далее сохранил пробел, опять считал 4 символа, далее сохранил пробел, итд
    в чем сложность, я не вижу.
     
  5. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    А как считать по байтно? Есть какая, то функция? Я в с++ еще только начинающий и многое не знаю. Буду очень рад помощи.
     
  6. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    Помогите пожалуйсто.....
     
  7. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    А, Я в с++ ваще "дуб".
    Но, как мне кажеться, что у функции есть параметр который указывает сколько байт читать из файла. Вот он = 4. Считал в буфер. Записал " ". И опять читаешь 4 байта и опять " ".
     
  8. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    zoolus
    оно?
    Код (Text):
    1. #include <iostream>
    2. #include <string>
    3.  
    4. int main(){
    5.  
    6.  std::string src = std::string("Ne_Sleduet_Vibirat_sluchayniu_clu4");
    7.  
    8.  const int src_len = src.length();
    9.  std::string dst = std::string("", src_len + src_len/4);
    10.  
    11.  int k = 0;
    12.   for (int i =0; i < src.length(); ++i){
    13.      if (i>0 && i % 4 == 0){
    14.        dst[k++] = ' ';
    15.     }
    16.     dst[k++] = src[i];
    17.  }
    18.  std::cout << "src: " << src << std::endl;
    19.  std::cout << "dst: " << dst << std::endl;
    20.  
    21.  
    22. return 0;
    23. }
     
  9. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    Оно, большое спасибо.
     
  10. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    А теперь такой вопрос, а можно этот текст как-то обратно восстановить? Произвести обратные действия..
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    /offtop
    А я недавно скачал из инета файл в котором не оказалось нужной инфы теперь ломаю голову - как закачать его обратно где взял :)))
     
  12. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    Просто разбиения текста на блоки, это один из шагов аллгоритма кодирования, а теперь для декодирования естественно текст нужно восстановить.
     
  13. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    zoolus
    ну это понятно;) что сложного? выше код я запостил. немножко подумай как его изменить для обратных действий.
     
  14. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    Нужно поменять условие в цикле?
     
  15. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    zoolus
    Нужно не бояться думать и экспериментировать ;), не всё же время varnie за тебя это делать будет :)
    Пробуй компилить все мысли какакие приходят тебе в голову, с n-ой попытки получится ;)
     
  16. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    Блин , помоему уже все способы перебрал, подскажите хоть что изменить?:dntknw:
     
  17. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Код (Text):
    1.   for (int i =0; i < src.length(); ++i){
    2.      if (i>0 && i % 5 != 0){
    3.          dst[k++] = src[i];
    4.     }
     
  18. zoolus

    zoolus New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    18
    Ты копируеш данные из массива src, в dst[k++], но в массиве src лежит исходный , нормальный текст. Толку? Нужно создать доп.массив и в него копировать данные из dst. Твое условие для такого случая не подходит. В твоем коде ты просто перезаписываеш массив dst исходным текстом из src?
     
  19. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    zoolus
    Y_Mur написал правильно. ну еще 'i>0 &&' можно опустить. Ну и для понятности, переименовать куски 'dst..' в 'src..' и наоборот, кроме объяв.

    PS иногда полезно немного думать перед тем как посты постить
     
  20. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _basmp_
    Да скопипастил из #8 не особо вникая, а ещё другим советы "надо думать" даю :))
    Но и ты не прав ;)
    правильно (i==0 || i % 5 != 0), а то нулевой символ не скопируется ;)