Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2010, 01:32   #1
disaer
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 13
Смущение Ошибка при шифровании

Здравствуйте, стоит задача:"Закодировать текстовый файл методом цезаря и бла бла бла..." С билдером не дружу вообще Шифрую с ключом "3". Все бы было хорошо, но вылетает ошибка памяти а потом появляется окошко. с текстом

Код:
char& __fastcall operator [](const int idx)
    {
      ThrowIfOutOfRange(idx);   // Should Range-checking be optional to avoid overhead ??
      Unique();                 // Ensure we're not ref-counted
      return Data[idx-1];
    }
Я конечно понимаю, что это вылет за индексы, но где и как исправить? И еще:"Это правильно Memo1->Text = Memo1->Text.Insert(a[k+3]%26,j); или как правильно будет, чтобы если индекс больше массива, индекс шел по кругу?"

Код:
void __fastcall TForm1::N7Click(TObject *Sender)
{
char a[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char b[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x','y','z'};
int i=0,j=1;
char s[1]="";;
if(Memo1->Lines->Count==0)
{MessageBox(NULL, "Îòêðîéòå ëþáîé(íå ïóñòîé) òåêñòîâûé ôàéë", "Íåò äàííûõ äëÿ øèôðîâàíèÿ!!!", MB_OK | MB_ICONERROR);}
else
  {i=strlen(Memo1->Text.c_str());
     while(j<i)
     {
     if(j<i)
        {for(int k=0;k<26;k++)
          {if(Memo1->Text[j]==a[k])
             {Memo1->Text = Memo1->Text.Delete(j,1);
              Memo1->Text = Memo1->Text.Insert(a[k+3],j);
              break;
             }
           else
                {for(int r=0;r<26;r++)
                   {if(Memo1->Text[j]==b[r])
                     {Memo1->Text = Memo1->Text.Delete(j,1);
                      Memo1->Text = Memo1->Text.Insert(b[r+3],j);
                      break;
                     }
                     else
                       {s[1]=Memo1->Text[j];
                       Memo1->Text=Memo1->Text.Delete(j,1);
                       Memo1->Text=Memo1->Text.Insert(s[1],j);
                       }
                   }
                }
          }
        }
    j=j+1;
    }
  }
}
disaer вне форума Ответить с цитированием
Старый 29.09.2010, 01:53   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Будет ошибка на буквах x-z, когда k или r будет слишком близко к концу массива?
Поставьте a[(k+3) % 26] или просто добавьте в конец массива 3 элемента из начала

И что за кусок в конце, с заменой символа сам на себя? Зачем это?
Black Fregat вне форума Ответить с цитированием
Старый 29.09.2010, 02:21   #3
disaer
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 13
По умолчанию

А это я перебивал весь цикл, забыл удалить наверное. Тут смысл был таков, что если не символ алфавита, то типо дальше по тексту...
Да ошибка исчезла, спасибо. Но теперь еще одна проблема.
Из строки:AbCdEf. получаю DbFdHf. И последний Символ тоже не шифруется Почему-то пропускаются малые буквы.

Код:
void __fastcall TForm1::N7Click(TObject *Sender)
{
char a[29] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C'};
char b[29] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x','y','z','a','b','c'};
int i=0,j=1;
char s[1]="";;
if(Memo1->Lines->Count==0)
{MessageBox(NULL, "Îòêðîéòå ëþáîé(íå ïóñòîé) òåêñòîâûé ôàéë", "Íåò äàííûõ äëÿ øèôðîâàíèÿ!!!", MB_OK | MB_ICONERROR);}
else
  {i=strlen(Memo1->Text.c_str());
     while(j<i)
     {
     if(j<i)
        {for(int k=0;k<26;k++)
          {if(Memo1->Text[j]==a[k])
             {Memo1->Text = Memo1->Text.Delete(j,1);
              Memo1->Text = Memo1->Text.Insert(a[k+3],j);
              break;
             }
           else
                {for(int r=0;r<26;r++)
                   {if(Memo1->Text[j]==b[r])
                     {Memo1->Text = Memo1->Text.Delete(j,1);
                      Memo1->Text = Memo1->Text.Insert(b[r+3],j);
                      break;
                     }
                   
                   }
                }
          }
        }
    j=j+1;
    }
  }
}

Последний раз редактировалось disaer; 29.09.2010 в 02:33.
disaer вне форума Ответить с цитированием
Старый 29.09.2010, 10:32   #4
disaer
Пользователь
 
Регистрация: 05.11.2009
Сообщений: 13
По умолчанию

Все, разобрался, был лишний If
Всем спасибо, код выглядит так


Код:
void __fastcall TForm1::N7Click(TObject *Sender)
{
char a[29] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C'};
char b[29] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x','y','z','a','b','c'};
int i=0,j=1;
if(Memo1->Lines->Count==0)
{MessageBox(NULL, "Îòêðîéòå ëþáîé(íå ïóñòîé) òåêñòîâûé ôàéë", "Íåò äàííûõ äëÿ øèôðîâàíèÿ!!!", MB_OK | MB_ICONERROR);}
else
  {i=strlen(Memo1->Text.c_str());
     while(j<=i)
     {
      for(int k=0;k<26;k++)
          {if(Memo1->Text[j]==a[k])
             {Memo1->Text = Memo1->Text.Delete(j,1);
              Memo1->Text = Memo1->Text.Insert(a[k+3],j);
              break;
              }
          }
     for(int r=0;r<26;r++)
        {if(Memo1->Text[j]==b[r])
           {Memo1->Text = Memo1->Text.Delete(j,1);
           Memo1->Text = Memo1->Text.Insert(b[r+3],j);
           break;
           }
        }
        j=j+1;
     }
  }
}
disaer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при компиляции FoxXx Общие вопросы C/C++ 11 14.06.2010 19:57
конечные автоматы в шифровании Aviagis Свободное общение 0 03.05.2010 17:13
Ошибка при компиляции 7B! Общие вопросы .NET 7 08.01.2010 13:11
Небольшой вопросик о шифровании XORом amico Помощь студентам 5 10.11.2009 14:19
Ошибка при загрузке.... Ronni10 Операционные системы общие вопросы 6 10.01.2008 22:20