ОБРАБОТКА СТРОКОВЫХ ВЫРАЖЕНИЙ

advertisement
ОБРАБОТКА СТРОКОВЫХ ВЫРАЖЕНИЙ
Строка – это либо упорядоченная последовательность символов (знак, для
которого установлен определенный код – число от 0 до 255), либо пустая строка. Для
обозначения строки используются кавычки:
“” – обозначение пустой строки;
“студент” – пример непустой строки.
Количество символов в строке называют длиной строки.
Каждый символ в строке имеет свою позицию – порядковый номер при счете
слева направо. Например, символ “д” в строке “студент” имеет 4-ю позицию.
При программировании часто приходится иметь дело не со всей строкой, а с
частью строки и ее называют подстрокой (следует заметить, что это не определение, а
понятие). Например, “ход” – это часть строки “пароход”.
Строки можно складывать, и эта операция называется конкатенацией.
Конкатенация обозначается знаком “+” или “&”.
Примечание. Нельзя путать конкатенацию строк (знак “+”) со сложением чисел. А
с помощью знака “&” можно складывать и числа, при этом числа будут преобразованы
в строки.
Следующий программный код демонстрирует единственную операцию над
строками:
Dim S1 As String, S2 As String, S As String
S1=”Сам” : S2 = “лет”
S=S1+”о”+S2
Значением переменной S будет строка “Самолет”.
Для работы со строками в VB существует ряд функций. Перечень наиболее часто
использующихся функций приведен в табл.1. Применение некоторых из них приведено
в программном коде при решении следующей задачи:
Задача 1. Ввести предложение и вывести каждое слово на форму прописными буквами
с новой строки
Private Sub Command1_Click()
Dim S As String, i As Integer, l As Integer, p As String * 1
S = InputBox("Введите предложение") ' Ввод предложения
l = Len(S)
' Определение длины предложения
For i = 1 To l
p = Mid(S, i, 1)
'Выделение очередной буквы от
начала предложения
If p <> " " Then Print UCase(p); Else Print 'Проверка наличия пробела.
Если не пробел, то перевод символа в прописную букву и
вывод на форму ,а иначе – переход на следующую строку.
Next i
End Sub
Строковые функции. Строковые функции либо возвращают строковые
значения, либо их аргументами являются строковые величины. К строковым функциям
отнесем: функцию определения длины строки, функции выделения подстроки и
функцию поиска подстроки, а также функции преобразования (табл. 1). Для указания
аргументов в функциях будем использовать суффиксы.
Таблица 1
Строковые функции
Функция
Len(S$)
Mid(S$,P,[K])
Left(S$,K)
Right(S$,K)
InStr(S$,T$)
Val(S$)
Str(F)
UCase(S$)
LCase(S$)
Asc(S$)
Chr(K&)
Возвращаемое значение
Функция определения длины строки S$
Функции выделения подстроки с позиции P длиной K
Функция выделения подстроки слева длиной K
Функция выделения подстроки справа длиной K
Функция поиска подстроки T$ в строке S$
Функция преобразования строки S$ в число
Функция преобразования числа F в строку символов
Функция преобразования всех символов строки S$ в прописные
Функция преобразования всех символов строки S$ в строчные
Функция преобразования в код ASCII первого символа строки S$
Функция преобразования кода ASCII в строку из одного символа
Например,
left(«Василий»,3) дает результат «Вас»,
right(«Василий»,3) дает результат «лий»
mid(«Василий»,2,3) дает результат «аси».
Функции даты и времени. К этим функциям отнесем две функции: функцию даты
- Date и функцию времени – Time.
Например, после выполнения следующей программы:
Dim T As Date
T = Date
MsgBox "Сегодня " + Str(T)
На экране появится окно сообщения (рис. 1), в котором будет выведена текущая дата.
Рис. 1. Текущая дата
После выполнения следующей программы:
Dim s As Variant
s = Time
MsgBox "Текущее время " + Str(s) + " секунд"
На экране появится окно сообщения (рис. 2), в котором будет выведено текущее
время.
Массивы
Задача 12. :Для каждого из студентов группы известны фамилия и номер
зачетной книжки. Составить алгоритм и проект программы вывода фамилий
и номеров их зачетных книжек в порядке возрастания номеров зачетных
книжек.
Опишем переменные, которые будут использованы в программе:
Names(30) – массив фамилий;
Number(30) - массив номеров зачетных книжек;
i, j - переменные циклов;
n - количество студентов в группе;
zk, s – промежуточные переменные.
Private Sub Command1_Click()
Dim Names(30) As String, Number(30) As Long
Dim n As Integer, zk As Long, s As String
n = Val(InputBox("Введите количество студентов, не более 30"))
For i = 1 To n
Names(i) = InputBox("Введите фамилию " + Str(i) + " студента")
Number(i) = Val(InputBox("Введите номер его зачетной книжки"))
Print Names(i), Number(i)
Next i
Print
For i = 1 To n - 1
For j = i To n
If Number(j) > Number(i) Then
zk = Number(i): s = Names(i)
Number(i) = Number(j): Names(i) = Names(j)
Number(j) = zk: Names(j) = s
End If
Next j
Next i
For i = 1 To n
Print Names(i), Number(i)
Next i
End Sub
ИСПОЛЬЗОВАНИЕ ОБЪЕКТОВ УПРАВЛЕНИЯ LISTBOX, COMBOLISTBOX ДЛЯ ВВОДА И
ВЫВОДА МАССИВОВ ИНФОРМАЦИИ
Вводить элементы массивов, содержащихся в этих объектах управления, на
стадии проектирования программы можно, щелкнув по свойству List окна свойств и
вводя значения в открывшееся окно (если нужно ввести несколько значений подряд,
после ввода каждого из них нажимать Ctrl+Enter). Таким образом, свойство List
является массивом, с которым можно производить все разрешенные для массивов
операции.
Программным путем дописывать элементы можно в конец этого массива с
помощью оператора AddItem по схеме: AddItem
<дописываемый элемент>.
Количество элементов при этом дается свойством ListCount.
Во время работы программы можно также вписать элемент, который требуется
ввести, в окно объекта управления ComboListBox, однако нужно иметь в виду, что он
не войдет непосредственно в массив List, а будет присвоен свойству Text. Чтобы ввести
его в массив List, необходимо выполнить операцию AddItem (например, для объекта
управления Combo1 операцию Combo1.AddItem Combo1.Text)
Исключить элемент из массива, если известен его индекс, можно оператором
RemoveItem по схеме RemoveItem
<индекс>. Очистить содержимое объекта
управления можно оператором Clear, например, List1.Clear.
Важной особенностью этих объектов управления является возможность
подсветить нажатием мыши (выделить) отдельные элементы массива и работать с
ними. В ComboListBox может быть выделен только один элемент, его индекс дается
свойством ListIndex (если выделенные элементы отсутствуют, ListIndex= -1) . В ListBox
- несколько элементов, в зависимости от значения свойства MultySelect. Если оно равно
0, может быть выделен лишь один элемент, индекс которого дается свойством
ListIndex. Если оно равно 1, можно выделить несколько элементов. Их индексы можно
найти, используя свойство Selected, являющееся, как и List, массивом. В этом массиве,
состоящем из нулей и единиц, единицы стоят на местах, соответствующих
подсвеченным элементам.
Представляет интерес свойство Sorted обоих объектов управления. При придании
ему значения True при выполнении программы элементы этих объектов
упорядочиваются по возрастанию (числовые) или лексикографически (текстовые).
Рассмотрим, как можно использовать объект управления ListBox для ввода и
вывода массивов данных, решая задачу:
Задача 13. Составить проект программы, в котором определяется самый
высокий студент в группе.
Постановка задачи:
На стадии проектирования программы введем список фамилий в массив List1.List,
а их роста - в массив List2.List, вывод фамилии самого высокого студента и его роста
осуществим на форму. Следовательно, на форме надо разместить два объекта ListBox и
одну командную кнопку.
После ввода фамилий студентов и их ростов пользовательский интерфейс будет
выглядеть так, как показано на рис. 31.
Программный код, демонстрирующий работу с массивами с использованием объекта
управления ListBox, будет представлен ниже:
Private Sub Command1_Click()
Dim i%, n%, max As Integer, nom As Integer
n% = List1.ListCount
max = Val(List2.List(0)) : nom=1
For i% = 1 To n%
If Val(List2.List(i%)) > max Then
max = Val(List2.List(i%)): nom = i%+1
End if
Next i%
Print "Самый высокий - "; List1.List(nom),"его рост=";Val(List2.List((nom)))
End Sub
Рассмотрим, как программным путем можно дописывать элементы в конец
массива ListBox с помощью оператора AddItem, решая такую задачу:
Задача 14. Составить программу, в которой ввести с клавиатуры фамилии,
имена и даты рождения студентов группы и вывести их в три окна списка –
объекты класса ListBox экранной формы.
Опишем переменные, которые будут использованы в программе:
FName – фамилия очередного студента;
Nname – имя студента;
Year – год рождения.
Пользовательский интерфейс для решения этой задачи представлен на рис
Программный код решения этой задачи будет выглядеть так:
Private Sub Command1_Click()
Dim FName As String * 15, Nname As String * 10, Year As Integer
For i = 1 To 5
FName = InputBox("Введите фамилию студента")
Nname = InputBox("Введите имя")
Year = InputBox("Введите год его рождения")
List1.AddItem FName
List2.AddItem Nname
List3.AddItem Str(Year)
Next i
End Sub
Результат работы проекта программы представлен на рис
Download