Лабораторная работа № 7	4 часа

Разработка алгоритмов и программ обработки строк.

Цель работы: Изучение функций обработки строк

Теоретические сведения.

Строка — упорядоченная последовательность символов. Каждый символ строковой величины занимает 1 байт памяти (код АSСII). Количество символов в строке называется ее длиной.

Строковая константа — последовательность символов, заключенных в кавычки. Например: “это строковая константа” , “272”. Две следующих друг за другом кавычки (“”) обозначают “пустую строку”, т.е. строку нулевой длины.

Строковая переменная описывается в разделе описания переменных:

Dim <идентификатор> As String

Например:

Dim Name As String

Операции над строками.

Операция сцепления (конкатенации) (&) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные.

Пример: “Мама”&” мыла”&“ раму”. В результате получится строка: “Мама мыла раму” . Длина результирующей строки не должна превышать 255.

Операции отношения: =, <, >, <=, >=, <> позволяют произвести сравнение двух строк, в результате чего получается логическое значение (true или false). Операция отношения имеет приоритет более низкий, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.

Пример.

Выражение	Результат
“True1”<”True2”	True
“Mother”>”MOTHER”	True
“Мама” <> “ Мама”	True
“Cat”=”Cat”	True

Функция Left(S, N) выделяет из строки S подстроку длиной N символов, начиная с левого края строки.

Пример.

Значение S	Выражение	Результат
“Мама мыла раму”	Left (S, 4)	“Мама”
“Маша ела кашу”	Left (S,8)	“Маша ела”

Функция Len (S) определяет текущую длину строки S. Результат — значение целого типа.

Пример.

Значение S	Выражение	Результат
“test-5”	Len(S)	6
“(А+В)*С”	Len(S)	7

Функция InStr(N,S1,S2) обнаруживает первое появление в строке S2 подстроки S1. Поиск начинается с позиции N, этот аргумент необязателен. Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 подстроки S1 не обнаружено, то результат равен 0.

Пример.

Значение S1	Выражение	Результат
“Abcdef”	InStr(S1,”cd”)	3
“abcdcdef”	InStr(4,S1,”cd”)	5
“abcdef”	InStr(S1, “k”)	0

Функция Mid(S, Рог, N). Результат – новая строка длины N из символов строки S, взятых подряд, начиная с позиции Poz.

Пример.

Значение S	Выражение	Результат
“abcdefg”	Mid(S,1,3)	“abc”
“abcdefg”	Mid(S,5,2)	“ef”

Функция Right(S,N). Результат- строка длиной N символов, взятых подряд из строки S, начиная с правого края.

Пример.

Значение S	Выражение	Результат
“ЭВМ IBM-PC”	Right (S,6)	“IBM-PC”

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

Решение. Идея алгоритма состоит в следующем: просматриваются все символы исходной строки и проверяется принадлежность каждого символьному интервалу от 0 до 9. Если “да”, то такой символ присоединяется к строке S2.

Sub stroki() Dim S1 As String Dim S2 As String Dim S As String Dim i As Integer S1 = InputBox("Введите исходную строку") S2 = " " For i = 1 To Len(S1) S= Mid(S1, i, 1) If S>= "0" And S<= "9" Then S2 = S2 & S Next i MsgBox "Результат: " & S2 End Sub

Если при тестировании программы была введена исходная строка: “df56gh£789yt6u8k88w” , будет получен результат: “567896888”.

В VBA имеются следующие функции обработки строковых выражений.

Функция	Возвращаемое выражение
Asc	Возвращает ASCII-код начальной буквы строки. Синтаксис: Asc(Строка)
Chr	Преобразует ASCII-код в строку. Синтаксис: Chr(Код) Например Chr (13) — переход на новую строку, Chr(97) = "а"
Lcase	Преобразует строку к нижнему регистру. Синтаксис: Lcase(Строка)
Ucase	Преобразует строку к верхнему регистру. Синтаксис: Ucase(Строка)
Left	Возвращает подстроку, состоящую из заданного числа первых символов исходной строки. Синтаксис: Left(string, length) Аргументы: length — число символов string —исходная строка
Right	Возвращает строку, состоящую из заданного числа последних символов исходной строки. Синтаксис: Right(string, length) Аргументы: length — число символов string — исходная строка
Mid	Возвращает подстроку строки, содержащую указанное число символов Синтаксис: Mid(string, start [, length]) Аргументы: string — строковое выражение, из которого извлекается подстрока start — позиция символа в строке string, с которого начинается нужная подстрока length — число возвращаемых символов подстроки.
Len	Возвращает число символов строки. Синтаксис: Len(Строка)
LTrim	Возвращает копию строки без пробелов в начале Синтаксис: LTrim(Строка)
Rtrim	Возвращает копию строки без пробелов в конце. Синтаксис: RTrimfСтрока)
Trim	Возвращает копию строки без пробелов в начале и в конце Синтаксис: Trim(Строка)
Space	Возвращает строку, состоящую из указанного числа пробелов. Синтаксис: Space(Число)
String	Возвращает строку, состоящую из указанного числа повторений одного и того же символа. Синтаксис: String(number,character) Аргументы: number — число повторений символа character — повторяемый символ
StrComp	Возвращает результат сравнения двух строк. Синтаксис: StrComp(stringl, string2 [, compare]) Аргументы: stringl и string2 — два любых строковых выражения compare — указывает способ сравнения строк. Допустимые значения: 0 (двоичное сравнение), 1 (посимвольное сравнение без учета регистра) Возвращаемые значения: string1 меньше, чем string2, то -1 string1 равняется string2, то 0 string1 больше, чем string2, то 1
InStr	Возвращает позицию первого вхождения одной строки внутри другой строки. Синтаксис: InStr([start, ]stringl, string2[, compare]) Аргументы: start — числовое выражение, задающее позицию, с которой начинается каждый поиск. Если этот аргумент опущен, поиск начинается с первого символа строки Возвращаемое выражение stringl — строковое выражение, в котором выполняется поиск string2 — искомое строковое выражение compare — указывает способ сравнения строк. Допустимые значения: 0 (для двоичного сравнения), 1 (посимвольное сравнение без учета регистра).

Преобразование строки в число и обратно осуществляют следующими функциями.

Val (строка)	Возвращает числа, содержащиеся в строке, как числовое значение соответствующего типа
Str (число)	Возвращает значение типа variant (string), являющееся строковым представлением числа

Задания к выполнению

Заменить в тексте букву “о” на цифру “0”, а букву “з” на цифру “3”. Вывести количество этих замен.

Определить, является ли введенное 6-значное число числом-палиндромом. Числа-палиндромы — это такие числа, которые читаются одинаково как справа налево, так и слева направо, т.е. 654456, 112211 и т.д.

Задан текст. Проверить, какая из букв «а» или «е» встречается чаще.

Задан текст. Распечатать номера позиций, на которых встречается буква «к».

Определить, сколько в тексте слов заканчивается на букву «о».

Известно, что в заданный текст входит хотя бы одна буква «а», причем не на последнем месте. Напечатать по одной литере текста, следующей непосредственно за буквой «а».

Определить, сколько раз в тексте встречается введенное слово.

Определить, сколько слов в тексте содержит хотя бы одну букву “d”.

Напечатать те слова из текста, в которых нет удвоенной буквы.

Удалить из текста удвоенные буквы.

Перед каждой цифрой в тексте вставить знак «+».

Напечатать самое длинное слово из заданного текста.

Найти удвоенные буквы в строке и их позиции.

В приложении приведены примеры процедур обработки строк

ПРИЛОЖЕНИЕ

Функция Split предназначена в VBA Excel для разделения строки на подстроки по специальным меткам - разделителям. Разделителем может быть как отдельный символ, так и строка из нескольких символов.

Синтаксис функции

Split (Expression,[Delimiter],[Limit],[Compare])

Обязательным параметром функции Split является Expression - если остальные параметры явно не указаны, используются их значения по-умолчанию.

Параметры функции

Параметр	Описание	Значение по умолчанию
Expression	Строка, содержащая подстроки и разделители	Нет
Delimiter	Разделитель, представляющий один или более символов	Пробел
Limit	Максимальное число подстрок, на которые должна быть разделена входная строка	-1
Compare*	Определяет, какое используется сравнение, двоичное - CompareMethod.Binary (0) или текстовое - CompareMethod.Text (1)	0

*Если используется двоичное сравнение (0 или CompareMethod.Binary), функция чувствительна к регистру букв. Если используется текстовое сравнение (1 или CompareMethod.Text), функция не чувствительна к регистру букв.

Возвращаемые значения

Функция Split возвращает одномерный массив с индексацией от нуля, который содержит указанное параметром Limit число подстрок. Чаще всего, функция Split используется со значением параметра Limit по-умолчанию, равному -1, когда возвращаются все найденные в исходной строке подстроки.