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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2014, 19:17   #1
Maks3
Пользователь
 
Регистрация: 23.11.2014
Сообщений: 28
Вопрос Индекс находился вне границ массива.

Есть код: шифрование по таблице Виженера. Если Ключ >= тексту все хорошо шифруется, если ключ < текста выдает ошибку Индекс находился вне границ массива. Написано так, что-бы если в тексте или ключе встречается символ, кроме букв, он выдавал этот символ без изменений.
Код:
private static int smesh = (int)'a';//смещение алфавита относительно таблицы юникодов
        private static int alphLength = 26;
        static char[] ExceptSymbols = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
        public static string Encrypt(String text, String key)
        {
            StringBuilder ans = new StringBuilder();
            for (int i = 0; i < text.Length; i++)
            {
                if (!ExceptSymbols.Contains(text[i]))
                {
                    ans.Append(text[i]);
                }
                else if (!ExceptSymbols.Contains(key[i])) //тут вылетает ошибка если длина текста > длины ключа
                {
                    ans.Append(text[i]);
                }

                else
                {
                    int num = (text[i] + key[i % key.Length] - 2 * smesh) % alphLength;
                    //в num лежит номер буквы в алфавите
                    char simvol = (char)(num + smesh);//получаем нужный символ
                    ans.Append(simvol);
                }

            }
            return ans.ToString();
        }
Maks3 вне форума Ответить с цитированием
Старый 23.11.2014, 19:27   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И о чем вопрос? Вы обращаетесь к несуществующему элементу массива, вот и выпадает исключение.

Изменяйте свой алгоритм/код, чтобы не было таких ситуаций.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.11.2014, 21:20   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Можно попробовать банальный mod
Код:
keyLen = key.Length;
...
else if (!ExceptSymbols.Contains(key[i % keyLen]))
phomm вне форума Ответить с цитированием
Старый 23.11.2014, 21:54   #4
Maks3
Пользователь
 
Регистрация: 23.11.2014
Сообщений: 28
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Можно попробовать банальный mod
Код:
keyLen = key.Length;
...
else if (!ExceptSymbols.Contains(key[i % keyLen]))
Помогло. Спасибо!
Maks3 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка времени выполнения: Индекс находился вне границ массива (pascal) dijetol Помощь студентам 2 10.04.2014 16:16
Ошибка: Индекс находился вне границ массива archi-boy C# (си шарп) 11 15.11.2013 12:45
Индекс находился вне границ массива. banan4ik Помощь студентам 1 30.05.2013 02:25
[C#] Индекс находился вне границ массива JonMagon Помощь студентам 12 22.01.2012 23:06
C# ошибка:"Индекс находился вне границ массива" potap88 Помощь студентам 16 18.04.2010 15:50