5.7. Строковые операции и функции


            Для обработки строк, т.е. последовательностей символов, и строковых переменных (тип String) используется операция конкатенации (сложения строк) и строковые функции.

            Проект 5.7. «Строковый калькулятор». Создадим строковый калькулятор, который позволит производить различные преобразования строк. 

Проект «Строковый калькулятор».

1

Создать новый проект. Разместить на форме три текстовых поля и кнопку. Присвоить им имена: txt1, txt2, txt3, cmdCon.

2

Для кнопки ввести программный код событийной процедуры cmdCon_Click(), реализующий операцию конкатенации:

 

Private Sub cmdCon_Click()

txt3.Text = txt1.Text + txt2.Text

End Sub

3

Запустить проект, в два первых поля ввести строки и щелкнуть по кнопке Конкатенация. В третьем поле появится результат сложения двух строк.

             Воспользуемся теперь для преобразования строк строковой функцией Mid$(строка$,bytM,bytN). Функция вырезает из строки$ подстроку с символа, позиция которого в строке задается целочисленной переменной bytM, и длиной, которая задается целочисленной переменной bytN.

4

Разместить на форме кнопку и два текстовых поля. Присвоить им имена: cmdMid, txt1Mid, txt2Mid.

5

Для кнопки ввести программный код событийной процедуры cmdMid_Click(), реализующий операцию вырезания подстроки. Для преобразования значений свойства Caption  текстовых полей, предназначенных для ввода чисел, использовать функцию Val:

 

Private Sub cmd_Click()

txt3.Text = Mid$(txt1.Text, Val(txt1Mid.Text), Val(txt2Mid.Text))

End Sub

6

Запустить проект, в первое поле ввести строку, в поля функции вырезки подстроки ввести числа и щелкнуть по кнопке Mid$. В третьем поле появится вырезанная подстрока.

 

            Для определения количества символов в строке используется функция определения длины строки Len(строка$), аргументом которой является строка, а возвращает функция число, равное количеству символов в строке.  

7

Разместить на форме кнопку и присвоить ей имя cmdLen.

8

Для кнопки ввести программный код событийной процедуры cmdLen_Click(), реализующий операцию определения количества символов в строке:

 

Private Sub cmdLen_Click()

txt3.Text = Len(txt1.Text)

End Sub

9

Запустить проект, в первое поле ввести строку и щелкнуть по кнопке Len. В третьем поле появится число символов в строке.

            Для преобразования символов в соответствующий им числовой код используется функция Asc(строка$), при этом необходимо иметь в виду, что функция возвращает числовой код первого символа строки.  

10

Разместить на форме кнопку и присвоить ей имя cmdAsc.

11

Для кнопки ввести программный код событийной процедуры cmdAsc_Click(), реализующий операцию определения количества символов в строке:

 

Private Sub cmdAsc_Click()

txt3.Text = Asc(txt1.Text)

End Sub

12

Запустить проект, в первое поле ввести символ и щелкнуть по кнопке Asc. В третьем поле появится числовой код символа.

13

Сохранить проект в файле prj7.vbp.

 

            Проект 5.8. «Шифровка и дешифровка текстовых сообщений». Данный проект позволит зашифровывать и расшифровывать текстовые сообщения. Используем алгоритм шифрования, который базируется  на  использовании ключевой фразы (ключа шифрования).

            Пусть имеется некоторый секретный текст,  который нужно зашифровать. В процессе шифровки необходимо заменить каждый символ секретного текста на порядковый номер этого символа в  ключевой  фразе.

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

            Исходный секретный текст, зашифрованное и дешифрованное сообщения будем вводить и выводить в текстовых полях, а для запуска процедур шифровки и дешифровки используем кнопки.

Проект «Шифровка и дешифровка текстовых сообщений».

1

Разместить на форме три текстовых поля и две кнопки. Присвоить им имена: txtSecrtext, txtCod, txtDecod, cmdCod, cmdDecod.

            Шифрование. Сначала составим процедуру шифровки текстовых сообщений.  Пусть ключевая фраза будет значением строковой переменной strKF, а секретный текст значением свойства Text текстового поля txtSecrtext.

            Будем последовательно вырезать в цикле со счетчиком bytI символы из секретного текста, а затем во вложенном цикле со счетчиком bytJ будем искать такой же символ в ключевой фразе и запоминать его порядковый номер в целочисленном массиве bytZ. Таким образом, секретный текст будет зашифрован  последовательностью чисел, хранящейся в целочисленном массиве.

2

Для кнопки Зашифровать ввести программный код событийной процедуры cmdCod_Click(), реализующий шифрование текстового сообщения, введенного в текстовое поле txtSecrtext:

 

Dim bytI, bytJ, bytZ(1 To 200) As Byte, strKF, strA, strB As String

Private Sub cmdCod_Click()

strKF = "электронно-вычислительные машины, компьютеры (железо) позволяют находить значения функций, а ещё свойства готовых объектов"

For bytI = 1 To Len(txtSecrtext.Text)

strA = Mid$(txtSecrtext.Text, bytI, 1)

For bytJ = 1 To Len(strKF)

If Mid$(strKF, bytJ, 1) = strA Then bytZ(bytI) = bytJ: bytJ = Len(strKF) + 1

Next bytJ

txtCod.Text = txtCod.Text + Str(bytZ(bytI))

Next bytI

End Sub

            

            Дешифрование. Рассмотрим теперь алгоритм дешифровки. Итак, в нашем  распоряжении шифровка в форме целочисленного массива bytZ, которая выведена в текстовое окно txtCod.Text. Необходимо с помощью ключевой фразы превратить эту числовую последовательность в секретный текст.

            Затем, считывая по очередности числа шифровки (элементы целочисленного массива bytZ), необходимо  вырезать из ключевой фразы символ, номер которого по порядку  равен  значению числа шифровки. Полученный символ последовательно  присоединяется к значению txtDecod.Text, которое и является исходным секретным текстом.

3

Для кнопки Расшифровать ввести программный код событийной процедуры cmdDecod_Click(), реализующий расшифровку текстового сообщения, и его вывод в текстовое поле txtDecod:

 

Private Sub cmdDecod_Click()

For bytI = 1 To Len(txtSecrtext.Text)

strB = Mid$(strKF, bytZ(bytI), 1)

txtDecod.Text = txtDecod.Text + strB

Next bytI

End Sub

4

Разместить на форме три метки, которые сделают интерфейс проекта более наглядным.

5

Запустить проект на выполнение,  ввести в верхнее текстовое поле секретный текст.

6

Щелкнуть по кнопке Зашифровать, в среднем текстовом поле появится шифровка в виде числовой последовательности.

7

Щелкнуть по кнопке Расшифровать, в нижнем текстовом поле должен появиться исходный секретный текст.

8

Сохранить проект в файле prj8.vbp.

  

Задания для самостоятельного выполнения (Ответы)

5.30. Модернизировать проект 7 «Строковый калькулятор». Добавить возможности вырезки из строки левой и правой подстрок, определение позиции подстроки в строке и преобразования числового кода символа в символ.

5.31. Создать проект «Подсчет количества экземпляров символа в тексте», который позволяет подсчитывать количество экземпляров какого-либо символа в заданном тексте.

5.32. Усовершенствовать предыдущий проект-задание 5.31 так, чтобы ввод и вывод текста и символа производился с помощью текстовых окон.

5.33. Создать проект «Замена символа в тексте», который позволяет заменять в тексте один заданный символ на другой.

5.34. Усовершенствовать предыдущий проект-задание 5.33 так, чтобы ввод и вывод текста и символов производился с помощью текстовых окон.

5.35. Создать проект «Слово перевертыш», который изменяет прямую последовательность символов (слева направо)  во введенном слове на обратную (справа налево).

5.36. Усовершенствовать предыдущий проект-задание 5.35 так, чтобы ввод и вывод слова производился с помощью текстового окна.

5.37. Изменить проект 5.8 «Шифровка и дешифровка» таким образом, чтобы в программном коде событийных процедур использовался цикл с послеусловием.