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

Ошибка при обращению к индексам

29.09.2010, 02:30. Показов 959. Ответов 2
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;
    }
  }
}
Добавлено через 1 час 1 минуту
Сделал так, теперь ошибка с индексами не тревожит мой покой. Но почемуто у меня ишфруются только Большие символы.
Из строки:AbCdEf. получаю DbFdHf. И последний Символ тоже не шифруется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void __fastcall TForm1::N7Click(TObject *Sender)
{
[COLOR="Red"]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'};[/COLOR]
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)
     {
     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;
    }
  }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2010, 02:30
Ответы с готовыми решениями:

Ошибка при обращению к классу
namespace Triangle { class Edge; public class Point { public: double x; double y; Point(double xx = 0.0, double yy =...

Ошибка при обращению к свойствам формы
Помогите исправить ошибки, когда мне нужно вызвать цвет или шрифт или поиск в текстовом редакторе, возникает така ошибка:...

При обращению к классу возникает 91 ошибка
Const M As Integer = 100 Dim Student(M) As School Dim F, N, S, T As Integer _______________________________________ Private Sub...

2
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
29.09.2010, 02:48
А зачем шифрование маленьких букв загнано в ветку else?
Уберите вообще этот if, пусть два цикла шифрования просто идут внутри основного один за другим.

Интересно, а как должен быть зашифрован последний символ - точка?
1
0 / 0 / 1
Регистрация: 20.10.2009
Сообщений: 4
29.09.2010, 10:16  [ТС]
Цитата Сообщение от Black Fregat Посмотреть сообщение
А зачем шифрование маленьких букв загнано в ветку else?
Уберите вообще этот if, пусть два цикла шифрования просто идут внутри основного один за другим.

Интересно, а как должен быть зашифрован последний символ - точка?
Спасибо! Точку я случайно поставил когда тут писал. Из за этого If и не шифровало. Выкладываю код, может кому и понадобится.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;
     }
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2010, 10:16
Помогаю со студенческими работами здесь

Ошибка при обращению к серверу (сокеты) ftp.
При реализации функции передачи данных от сервера ftp клиенту выдает ошибку &quot;Invalid Patch!&quot;... Может я неправильно прописываю путь?...

Ошибка при обращению из потока к элементу управления
Добрый всем День! Пробую учебную программку по потокам. VS выдает ошибку. Сам не разберусь. Public Class Form1 Dim Поток1 As New...

[NASM] Ошибка при обращению к стеку FPU
Добрый день. Начал писать программу и застопорился на работе со стеком FPU. Вот то, что пока что написал: %include &quot;io.inc&quot; ...

Ошибка при обращению к полям класса, если их более одного
Всем привет. Возникла такая проблема. Необходимо реализовать: public DbSet&lt;User&gt; Users { get; set; } public...

Шифрование при обращению к USB девайсу
Есть USB девайсина. Необходимо исключить возможность работы с ней посторонних приложений и в частности детекта обращения к девайсу по...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru