Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 2
Регистрация: 05.02.2017
Сообщений: 56

Быстрая проверка символа

31.03.2018, 20:50. Показов 1875. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток в попытке реализовать шифр "Четырех квадратов"(https://ru.wikipedia.org/wiki/... _квадратов ) встретилась такая трудность , как "пропуск текста" , смысл в том что для шифрования берется два символа, по порядку и делается перестановка этих символов в четырех массивах.Смысл вопроса : так,как этот шифр моноалфавитный, он работает только с теми символами которые находятся в массивах alfavitEng - набор всех символов, мне нужна функция которая проверяла бы входимый символ с теми которые есть в матрице alfavitEng, но так как это алгоритм шифрования, мне нужно что бы это проходило как можно быстрее(я думаю, что полный перебор одного символа со всеми возможными будет не очень правильно и затратно)

Вот фрагмент класса где описан шифр:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
        static public string[,] mass1 = new string[6, 6];
        static public string[,] mass2 = new string[6, 6];
        static public string[,] mass3 = new string[6, 6];
        static public string[,] mass4 = new string[6, 6];
 
        static string[] alfavitEng = new string[]
        {
            "q", "w", "e", "r", "t","s",
            "y", "u", "i", "o", "a",".",
            "d", "f", "g", "h", "j",",",
            "k", "l", "z", "x", "c","?",
            "v", "b", "n", "m", "p","!",
            " ", ":", "(", ")", "=", "-"
        };
 
        /// <summary>
        /// Расшифровка
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static public string EncrGeneration2Symbols(string a, string b)
        {
            int ai=0, aj=0, bi=0, bj=0;
            for (int str = 0; str < 6; str++)
                for (int stlb = 0; stlb < 6; stlb++)
                {
                    if (mass2[str, stlb] == a) 
                    {
                        ai = str; aj = stlb;
                    }
                    if (mass3[str, stlb] == b)
                    {
                        bi = str; bj = stlb;
                    }
                }
            string slog = mass1[ai, bj] + mass4[bi, aj];
            return slog;
        }
        
        /// <summary>
        /// Шифрование 
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        static public string CrGeneration2Symbols(string a, string b)
        {
            int ai = 0, aj = 0, bi = 0, bj = 0;
            for (int str = 0; str < 6; str++)
                for (int stlb = 0; stlb < 6; stlb++)
                {
                    if (mass1[str, stlb] == a)
                    {
                        ai = str; aj = stlb;
                    }
                    if (mass4[str, stlb] == b)
                    {
                        bi = str; bj = stlb;
                    }
                }
            string slog = mass2[ai, bj] + mass3[bi, aj];
            return slog;
        }
 
        /// <summary>
        /// Генерирует ключ из 4-ох квадратов
        /// </summary>
        static public void Generation4MassEng()
        {
            int[,] c1, c2, c3, c4 = new int[6,6];
        Random rand = new Random();
 
            c1 = GetRandomMatrix(6, 6);
            c2 = GetRandomMatrix(6, 6);
            c3 = GetRandomMatrix(6, 6);
            c4 = GetRandomMatrix(6, 6);
 
            for (int i = 0; i < 6; i++)
                for (int j = 0; j < 6; j++) 
                {
                    mass1[i, j] = alfavitEng[c1[i, j]];//Верхний слева
                    mass2[i, j] = alfavitEng[c2[i, j]];//Верхний справа
                    mass3[i, j] = alfavitEng[c3[i, j]];//Нижний слева
                    mass4[i, j] = alfavitEng[c4[i, j]];//Нижний вправо
                }            
        }
 
        static Random rnd = new Random();
 
        /// <summary>
        /// Генерирует массив случайных чисел
        /// </summary>
        /// <param name="rowCount"></param>
        /// <param name="colCount"></param>
        /// <returns></returns>
        static int[,] GetRandomMatrix(int rowCount, int colCount)
        {
            int[,] matrix = new int[rowCount, colCount];
            int[] array = Enumerable.Range(0, rowCount * colCount).OrderBy(x => rnd.Next()).ToArray();
            for (int i = 0; i < rowCount; i++)
                for (int j = 0; j < colCount; j++)
                    matrix[i, j] = array[i * colCount + j];
            return matrix;
        }

И вывод результата шифрования
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
                    foreach (string a in textBox1.Lines)
                    {
                        string[] a1 = new string[a.Length+1];
 
                        for (int i = 0 ; i < a.Length; i++)
                        {
                                a1[i] = Convert.ToString(a[i]);
                        }
 
                        if ((a.Length) == 1)
                        {
                            a1[a.Length] = "a";
                        }
 
                        for (int i = 0; i < (a1.Length/2); i++)
                        {
                            string c1 = a1[i*2]; //c1 = c1.ToLower();
                            string c2 = a1[i*2+1]; //c2 = c2.ToLower();
                            textBox2.Text += Algoritms.CrGeneration2Symbols(c1, c2);
                        }
                    }
ПОМОГИТЕ!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2018, 20:50
Ответы с готовыми решениями:

Linq. быстрая проверка элемента на то имеет ли он в определенном бите единицу
Тяжело сформулировать кратко. Есть запрос к датасету: IEnumerable&lt;int&gt; docnumber = (from s in dataset.proc ...

Быстрая проверка качества РК
Всем здравствуйте! Некоторое время назад провели тест по рекламной компании. Пустили весь трафик не на сайт, а на whatsApp чат-бота и...

Быстрая проверка тестов
Всем привет!Хотела узнать с помощью каких горячих клавиш можно быстро проверить тесты на Delphi.К примеру такие клавиши в программе...

12
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.04.2018, 10:24
Цитата Сообщение от Igor_IO Посмотреть сообщение
мне нужна функция которая проверяла бы входимый символ с теми которые есть в матрице alfavitEng, но так как это алгоритм шифрования, мне нужно что бы это проходило как можно быстрее
Могу предложить два варианта: удобный, но не очень быстрый или быстрый, но с дополнительными затратами памяти.
Первый вариант:
C#
1
2
3
4
5
static HashSet<char> validChars = new HashSet<char>(alfavitEng.Select(s => s[0]));
static bool IsValidCharacter(char c)
{
   return validChars.Contains(c);
}
Второй вариант:
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
static char[] validChars = CreateValidCharMap();
static int min, max;
 
static char[] CreateValidCharMap()
{
    // Метод выполняется один раз при инициализации, потому с производительностью можно не заморачиваться.
    var chars = alfavitEng.Select(s => s[0]);
    min = chars.Min();
    max = chars.Max();
 
    var map = new char[max - min + 1];
    foreach (var c in chars)
        map[c - min] = c;
 
    return map;
}
 
static bool IsValidChar(char c)
{
    if (c < min || c > max)
        return false;
 
    return validChars[c - min] != 0;
}
В обоих случаях проверка осуществляется вызовом метода IsValidChar и передачей в него проверяемого символа.

Оба метода сделаны, основываясь на предположении, что алфавит может меняться.
Если алфавит всегда неизменен, то самый быстрый способ будет через switch с проверкой значений.
2
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
01.04.2018, 11:53
Проверил несколько вариантов что пришли на ум. Дополнил свитчем от предыдущего коментатора.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
using System;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;
using System.Text.RegularExpressions;
 
namespace ConsoleApp8
{
    class Program
    {
        static string _alphabet = "abcdefghijklmnopqrstuvwxyz.,?! :()=-";
        static Random _rnd;
        static Stopwatch _stopwatch;
 
        static List<int> _manualCheckSymbols = new List<int> { 32, 33, 40, 41, 44, 45, 46, 58, 61, 63 };
        static int _manualCheckMinAlphabet = 97;
        static int _manualCheckMaxAlphabet = 122;
 
        static void Main(string[] args)
        {
            _rnd = new Random();
            _stopwatch = new Stopwatch();
            var runs = 10000000;
 
 
            var indexOf = CheckIndexOf(runs);
            TimeSpan ts = new TimeSpan(indexOf);
            double ms = ts.TotalMilliseconds;
            Console.WriteLine("indexOf result = {0} ticks for {1} runs", indexOf, runs);
            Console.WriteLine("indexOf result = {0} ms for {1} runs", ms, runs);
            Console.WriteLine();
 
            var contains = CheckContains(runs);
            ts = new TimeSpan(contains);
            ms = ts.TotalMilliseconds;
            Console.WriteLine("contains result = {0} ticks for {1} runs", contains, runs);
            Console.WriteLine("contains result = {0} ms for {1} runs", ms, runs);
            Console.WriteLine();
 
            var manual = CheckManual(runs);
            ts = new TimeSpan(manual);
            ms = ts.TotalMilliseconds;
            Console.WriteLine("manual result = {0} ticks for {1} runs", manual, runs);
            Console.WriteLine("manual result = {0} ms for {1} runs", ms, runs);
            Console.WriteLine();
 
            var regex = CheckRegex(runs);
            ts = new TimeSpan(regex);
            ms = ts.TotalMilliseconds;
            Console.WriteLine("regex result = {0} ticks for {1} runs", regex, runs);
            Console.WriteLine("regex result = {0} ms for {1} runs", ms, runs);
            Console.WriteLine();
 
            var sw = CheckSwitch(runs);
            ts = new TimeSpan(sw);
            ms = ts.TotalMilliseconds;
            Console.WriteLine("swicth result = {0} ticks for {1} runs", sw, runs);
            Console.WriteLine("switch result = {0} ms for {1} runs", ms, runs);
            Console.WriteLine();
 
            Console.ReadLine();
        }
 
        static char GetRandomChar()
        {
            var rndIndex = _rnd.Next(_alphabet.Length);
 
            return _alphabet.ElementAt(rndIndex);
        }
 
        static long CheckIndexOf(int runs)
        {
            var ms = 0l;
            
            for (int i = 0; i < runs; i++)
            {
                var rndChar = GetRandomChar();
 
                _stopwatch.Reset();
                _stopwatch.Start();
                _alphabet.IndexOf(rndChar);
                _stopwatch.Stop();
                ms += _stopwatch.ElapsedTicks;
            }
 
            return ms;
        }
 
        static long CheckContains(int runs)
        {
            var ms = 0l;
 
            for (int i = 0; i < runs; i++)
            {
                var rndChar = GetRandomChar();
 
                _stopwatch.Reset();
                _stopwatch.Start();
                _alphabet.Contains(rndChar);
                _stopwatch.Stop();
                ms += _stopwatch.ElapsedTicks;
            }
 
            return ms;
        }
 
        static long CheckManual(int runs)
        {
            var ms = 0l;
 
            for (int i = 0; i < runs; i++)
            {
                var rndChar = GetRandomChar();
 
                _stopwatch.Reset();
                _stopwatch.Start();
                if (rndChar > _manualCheckMaxAlphabet)
                {
                }
                else if (rndChar < _manualCheckMinAlphabet)
                {
                    switch (rndChar)
                    {
                        case '.':
                            break;
                        case ',':
                            break;
                        case '?':
                            break;
                        case '!':
                            break;
                        case ' ':
                            break;
                        case ':':
                            break;
                        case '(':
                            break;
                        case ')':
                            break;
                        case '=':
                            break;
                        case '-':
                            break;
                    }
                }
                else
                {
                }
                _stopwatch.Stop();
                ms += _stopwatch.ElapsedTicks;
 
            }
 
            return ms;
        }
 
        static long CheckRegex(int runs)
        {
            var ms = 0l;
            var regex = new Regex("[a-z.,?! :()=-]");
 
            for (int i = 0; i < runs; i++)
            {
                var rndChar = GetRandomChar();
 
                _stopwatch.Reset();
                _stopwatch.Start();
                regex.Match(string.Format("{0}", rndChar));
                _stopwatch.Stop();
                ms += _stopwatch.ElapsedTicks;
            }
 
            return ms;
        }
 
        static long CheckSwitch(int runs)
        {
            var ms = 0l;
            var regex = new Regex("[a-z.,?! :()=-]");
 
            for (int i = 0; i < runs; i++)
            {
                var rndChar = GetRandomChar();
 
                _stopwatch.Reset();
                _stopwatch.Start();
                switch (rndChar)
                {
                    case 'a':
                        break;
                    case 'b':
                        break;
                    case 'c':
                        break;
                    case 'd':
                        break;
                    case 'e':
                        break;
                    case 'f':
                        break;
                    case 'g':
                        break;
                    case 'h':
                        break;
                    case 'i':
                        break;
                    case 'j':
                        break;
                    case 'k':
                        break;
                    case 'l':
                        break;
                    case 'm':
                        break;
                    case 'n':
                        break;
                    case 'o':
                        break;
                    case 'p':
                        break;
                    case 'q':
                        break;
                    case 'r':
                        break;
                    case 's':
                        break;
                    case 't':
                        break;
                    case 'u':
                        break;
                    case 'v':
                        break;
                    case 'w':
                        break;
                    case 'x':
                        break;
                    case 'y':
                        break;
                    case 'z':
                        break;
                    case '.':
                        break;
                    case ',':
                        break;
                    case '?':
                        break;
                    case '!':
                        break;
                    case ' ':
                        break;
                    case ':':
                        break;
                    case '(':
                        break;
                    case ')':
                        break;
                    case '=':
                        break;
                    case '-':
                        break;
                }
                _stopwatch.Stop();
                ms += _stopwatch.ElapsedTicks;
            }
 
            return ms;
        }
 
    }
}
Результаты у меня такие - быстрее всего самописная проверка. Насколько - см. вложение.
Миниатюры
Быстрая проверка символа  
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.04.2018, 12:11
Цитата Сообщение от Wlk Посмотреть сообщение
быстрее всего самописная проверка
Поскольку тесты корректными назвать нельзя, результат может быть любым
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
01.04.2018, 12:29
Цитата Сообщение от kolorotur Посмотреть сообщение
Поскольку тесты корректными назвать нельзя
А чего там не так конкретно?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.04.2018, 12:43
Цитата Сообщение от Wlk Посмотреть сообщение
А чего там не так конкретно?
Навскидку:
  • Код решения перемешан с кодом тестирования
  • Методы реализованы в стиле "тестирование ради тестирования" — они не выполняют реальную задачу
  • Каждый тест запускается с разным, случайно сгенерированным, набором данных
  • Проверяются только успешные пути выполнения

Не знаю, было ли это сделано (судя по коду — не было), но перед проверкой производительности надо сначала провести проверку корректности алгоритма, иначе самый быстрый вариант будет иметь вид bool IsValid(char c) => true;
0
1 / 1 / 2
Регистрация: 05.02.2017
Сообщений: 56
01.04.2018, 13:12  [ТС]
Спасибо за ваши ответы попробую поэкспериментировать с switch и с вариантом:

C#
1
2
3
4
5
static HashSet<char> validChars = new HashSet<char>(alfavitEng.Select(s => s[0]));
static bool IsValidCharacter(char c)
{
   return validChars.Contains(c);
}
Если , что-то получится напишу
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
01.04.2018, 13:16
Цитата Сообщение от kolorotur Посмотреть сообщение
Код решения перемешан с кодом тестирования
Ну вообще-то это и есть решение ради тестирования.

Цитата Сообщение от kolorotur Посмотреть сообщение
Методы реализованы в стиле "тестирование ради тестирования" — они не выполняют реальную задачу
Ну и что. Никакой реальной работы и не предполагалось. Ессно что функции не для использования as is.

Цитата Сообщение от kolorotur Посмотреть сообщение
Каждый тест запускается с разным, случайно сгенерированным, набором данных
Да, именно. Хотел таким образом имитировать реальные условия и устранить эффект того, что один алгоритм для определенного набора данных срабатывал бы значительно быстрее, чем для другого. Я думаю 10кк псевдорендомов достаточно что бы такого не случилось, и сработала статистика.

Цитата Сообщение от kolorotur Посмотреть сообщение
Проверяются только успешные пути выполнения
Почему же. Ладно, там где свитч согласен - делал последним, дефолт забыл. Добавил, проверил - время увеличилось на 0.9% всего лишь.
Но в остальных случаях работа выполняется не зависимо от этого.

Цитата Сообщение от kolorotur Посмотреть сообщение
иначе самый быстрый вариант будет иметь вид bool IsValid(char c) => true
Самописный метод ручной проверкой - да, не проверял на все случаи, и что? Что-то забыл - прибавятся проверки - увеличится время, согласен. Но, для одинакового алфавита который в условии характеры результатов должны быть те же.

Не совсем понимаю как эти замечания влияют на характер полученных результатов.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
01.04.2018, 13:30
Цитата Сообщение от Wlk Посмотреть сообщение
Ну вообще-то это и есть решение ради тестирования.
Так получается средняя температура по больнице: зачем тестирование, если оно потенциально не отображает реальную картину производительности разных алгоритмов?

Цитата Сообщение от Wlk Посмотреть сообщение
Ну и что. Никакой реальной работы и не предполагалось.
А для чего тестирование? И тестирование чего?

Цитата Сообщение от Wlk Посмотреть сообщение
Да, именно.
При сравнении алгоритмов — крайне вредный подход, т.к. отсутствует общая база.

Цитата Сообщение от Wlk Посмотреть сообщение
Хотел таким образом имитировать реальные условия и устранить эффект того, что один алгоритм для определенного набора данных срабатывал бы значительно быстрее, чем для другого.
Для этих целей генерируется несколько различных наборов данных и каждый алгоритм тестируется на этих наборах. Потом производится сравнение поведения алгоритмов с каждым из этих наборов.

Цитата Сообщение от Wlk Посмотреть сообщение
Почему же.
Потому что случайные символы генерируются из алфавита, значит ни один из алгоритмов никогда не произведет false, следовательно тестируются только успешные пути выполнения.

Цитата Сообщение от Wlk Посмотреть сообщение
не проверял на все случаи, и что?
Ну так это искажает реальную работоспособность алгоритма — смотрите выше пример с "самым быстрым"

Цитата Сообщение от Wlk Посмотреть сообщение
Не совсем понимаю как эти замечания влияют на характер полученных результатов.
Они делают результаты ненадежными: возможно, картина производительности действительно выглядит так, а возможно — совсем иначе.
Не имея уверенности в результатах такого тестирования при выборе подходящего алгоритма, полностью теряется смысл наличия этих результатов.
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
01.04.2018, 13:51
Цитата Сообщение от kolorotur Посмотреть сообщение
зачем тестирование, ...
ну не совсем так. Да я не писал код, который можно переюзать, но то что стоит в блоке, где измеряется время, и есть то что хотел измерить.

Цитата Сообщение от kolorotur Посмотреть сообщение
А для чего тестирование? И тестирование чего?
Ну ладно, работа там одна - вернуть результат. В принципе стоило бы проставить ретурны.

Цитата Сообщение от kolorotur Посмотреть сообщение
крайне вредный подход
Ну не совсем так

Цитата Сообщение от kolorotur Посмотреть сообщение
Для этих целей генерируется несколько различных наборов данных
ну это же доооолго =). Да, можно, но это надо сначала исследовать какие же наборы будут показательными. Хотелось этого избегнуть.

Цитата Сообщение от kolorotur Посмотреть сообщение
Потому что случайные символы генерируются из алфавита,
Ну тут ладно, согласен, не подумал.

Цитата Сообщение от kolorotur Посмотреть сообщение
искажает реальную работоспособность алгоритма
Искажает, да, но насколько. "Алгоритм" прост как пробка, что прям очень сомневаюсь что там прям сильно повлияет проверка на корректность.

Цитата Сообщение от kolorotur Посмотреть сообщение
Они делают результаты ненадежными: возможно, картина производительности действительно выглядит так, а возможно — совсем иначе.
Ну я бы не так сказал. Да - можно сделать их более достоверными, следуя вашим рекомендациям. Но мое мнение, что мой вариант картину достаточно достоверно отражает, и получен достаточно быстро (ну, конечно, ценой некоторого снижения достоверности). Хотя может я и ошибаюсь.
0
1 / 1 / 2
Регистрация: 05.02.2017
Сообщений: 56
02.04.2018, 01:36  [ТС]
Проблема была решена так: Был увеличен размер алфавита до 7 на 7 соответственно были исправлены методы

+ был добавлен метод
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
        public static bool CheckSimbols(char simbol)
        {
            switch (simbol)
            {
                case 'a':
                    return true;
                case 'b':
                    return true;
                case 'c':
                    return true;
                case 'd':
                    return true;
                case 'e':
                    return true;
                case 'f':
                    return true;
                case 'g':
                    return true;
                case 'h':
                    return true;
                case 'i':
                    return true;
                case 'j':
                    return true;
                case 'k':
                    return true;
                case 'l':
                    return true;
                case 'm':
                    return true;
                case 'n':
                    return true;
                case 'o':
                    return true;
                case 'p':
                    return true;
                case 'q':
                    return true;
                case 'r':
                    return true;
                case 's':
                    return true;
                case 't':
                    return true;
                case 'u':
                    return true;
                case 'v':
                    return true;
                case 'w':
                    return true;
                case 'x':
                    return true;
                case 'y':
                    return true;
                case 'z':
                    return true;
                case '.':
                    return true;
                case ',':
                    return true;
                case '?':
                    return true;
                case '!':
                    return true;
                case ' ':
                    return true;
                case ':':
                    return true;
                case '(':
                    return true;
                case ')':
                    return true;
                case '=':
                    return true;
                case '-':
                    return true;
                case '1':
                    return true;
                case '2':
                    return true;
                case '3':
                    return true;
                case '4':
                    return true;
                case '5':
                    return true;
                case '6':
                    return true;
                case '7':
                    return true;
                case '8':
                    return true;
                case '9':
                    return true;
                case '0':
                    return true;
                case '[':
                    return true;
                case ']':
                    return true;
                case '+':
                    return true;
            }
            return false;
        }
Ну и соответственно переписан код на вывод:
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
42
 foreach (string a in textBox1.Lines)
                    {
                        string[] a1 = new string[a.Length+1];
                        
                        for (int i = 0 ; i < a.Length; i++)
                        {
                            if (Convert.ToChar(a[i]) >= 65 && Convert.ToChar(a[i]) <= 90)
                            {
                                string d = Convert.ToString(a[i]);
                                    d = d.ToLower();
                                a1[i] = Convert.ToString(d);
                            }
                            else
                            a1[i] = Convert.ToString(a[i]);
                        }
                       
                        if ((a.Length) == 1)
                        {
                            a1[a.Length] = "a";
                        }
 
                        string c1 = "", c2 = "";
                        for (int i = 0; i < a1.Length; i++)
                        {
                          
                            if (a1[i] !=null)
                            if (Algoritms.CheckSimbols(Convert.ToChar(a1[i])))
                                    {
                                        if (c1 == "")
                                            c1 = a1[i];
                                        else if (c2 == "")
                                            c2 = a1[i];
 
                                        if (c1 != "" && c2 != "")
                                        {
                                            textBox2.Text += Algoritms.CrGeneration2Symbols(c1, c2);
                                            c1 = "";c2 = "";  
                                        }                                
                                    }                                                       
                            
                        }
                    }
Согласен не самое лучшее решение, но для шифрования короткого текста сгодиться. Для крупного текста нужно будет переписать вывод ну добавить более выстрою проверку !
Всем спасибо тема закрыта!!!
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
02.04.2018, 09:49
Igor_IO,
вот эти штучки еще можно объединить, чтоб было короче

C#
1
2
3
4
5
6
7
8
9
                case 'a':
                case 'b':
                case 'c':
                case 'd':
                case 'e':
                ....
                    return true;
               default:
                    return false;
0
1 / 1 / 2
Регистрация: 05.02.2017
Сообщений: 56
02.04.2018, 11:49  [ТС]
Обязательно так сделаю, спасибо за уточнение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2018, 11:49
Помогаю со студенческими работами здесь

Быстрая работа деления и умножения в двоичной системе с операндами длиной 64 символа каждый
Здравствуйте, требуется написать работу деления и умножения в двоичной системе счисления с операндами длиной 64 символа. Вот пример с Long,...

Самая быстрая проверка ТИЦ
Вот тестирую новый проект по покупке - продаже сайтов Smoz.ru, но на главной также еще внедрен чекер RANK-параметров сайта в поисковых...

Быстрая проверка на белый список
Есть код, который быстрей этого может проверить, есть ли mydata в белом списке ? std::set&lt;unsigned long long&gt; whitelist; if...

Быстрая проверка наличия в БД данных
Мне нужно очень много проверять, поэтому хотел бы узнать как само быстро проверять, наличие в БД, чтобы минимум было времени на проверку и...

Быстрая проверка натурального числа на простоту
Часто возникает задача проверки натурального числа на простоту. При этом имеются вероятностные и детерминированные методы проверки. Здесь...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru