- •7. Одномерные массивы 114
- •8. Обработка двумерных массивов (матриц) 162
- •9. Обработка строк 183
- •10. Тип данных, определенный пользователем. Структуры 214
- •11. Использование подпрограмм 228
- •Приложение 52 310 Список литературы 313 Введение
- •1. Этапы создания Windows-приложения
- •2. Среда Visual Basic 2005
- •2.1. Структура среды Visual Basic 2005
- •2.2. Создание нового проекта
- •2.3. Сохранение проекта
- •2.4. Выполнение приложения
- •2.5. Основные команды среды Visual Basic 2005
- •2.6. Методы тестирования
- •2.7. Отладка приложений в среде vb
- •3. Разработка интерфейса в среде vb. Основные элементы управления
- •3.1. Метка
- •3.2. Текстовое поле
- •3.3. Кнопка
- •3.4. Окно списка
- •3.5. Выравнивание положения элементов управления
- •4. Программа линейной структуры
- •4.1. Понятие переменной
- •4.2. Типы данных
- •4.3. Объявление переменных
- •4.4. Оператор присваивания
- •Оператор присваивания работает справа налево.
- •4.5. Константы
- •4.6. Арифметические операции
- •4.7. Математические функции
- •4.8. Арифметическое выражение
- •4.9. Окно ввода (InputBox)
- •4.10. Окно вывода сообщения (MsgBox)
- •4.11. Пример. Вычисление площади треугольника
- •4.12. Пример. Нахождение цифр числа
- •5. Организация ветвлений
- •5.1. Логические константы и переменные
- •5.2. Операции сравнения
- •5.3. Логические операции
- •5.4. Логическое выражение
- •5.5. Условный оператор
- •5.6. Функция iIf
- •5.7. Оператор множественного ветвления ElseIf
- •5.8. Оператор выбора Select Case
- •5.9. Оператор безусловного перехода GoTo
- •5.10. Пример. Решение линейного уравнения
- •5.11. Пример. Программа-калькулятор
- •6. Программирование повторений
- •6.1. Цикл со счетчиком
- •6.1.1. Табуляция функции
- •6.1.2. Вычисление факториала
- •6.1.3. Обработка совокупности чисел с известным числом элементов
- •6.2. Цикл с условием
- •6.2.1. Ввод с проверкой
- •6.2.2. Обработка совокупности чисел с неизвестным числом элементов
- •6.2.3. Вычисление суммы ряда по общей формуле
- •Вычисление суммы ряда с использованием рекуррентного соотношения
- •6.2.5. Вычисление произведения ряда
- •Решение нелинейных уравнений методом простой итерации
- •7. Одномерные массивы
- •Массивы всегда обрабатываются в цикле.
- •7.1. Ввод массива
- •Вывод массива в окно списка и в текстовое поле
- •7.3. Вычисление суммы и произведения элементов массива
- •7.4. Определение количества элементов массива, удовлетворяющих некоторому условию
- •7.5. Вычисление среднего арифметического и среднего геометрического элементов массива, удовлетворяющих некоторому условию
- •7.6. Нахождение максимального элемента массива
- •7.7. Нахождение минимального элемента массива, удовлетворяющего некоторому условию
- •7.8. Поиск первого элемента массива, удовлетворяющего некоторому условию
- •7.9. Поиск последнего элемента массива, удовлетворяющего некоторому условию
- •7.10. Замена одного элемента массива
- •7.11. Замена всех элементов массива, удовлетворяющих некоторому условию
- •7.12. Перестановка местами двух элементов массива
- •7.13. Формирование нового массива из некоторых элементов исходного массива
- •7.14. Проверка совпадения всех элементов массива
- •7.15. Проверка упорядоченности всех элементов массива
- •7.16. Сортировка массива методом пузырька
- •7.17. Линейная сортировка массива (методом поиска минимума)
- •Никогда нельзя использовать одновременно оба способа перестановки элементов массива.
- •8. Обработка двумерных массивов (матриц)
- •8.1. Ввод прямоугольной матрицы
- •8.2. Вывод прямоугольной матрицы в окно списка и в текстовое поле
- •8.3. Поиск максимального элемента матрицы
- •8.4. Обработка матрицы по строкам
- •8.5. Обработка матрицы по столбцам
- •8.6. Обработка квадратных матриц
- •Для обработки элементов, стоящих на любой диагонали, достаточно одного цикла. Для обработки элементов, принадлежащих к одному из треугольников, необходимо использовать вложенные циклы.
- •9. Обработка строк
- •9.1. Основные функции обработки строк
- •9.2. Посимвольная обработка строки
- •9.3. Формирование массива слов строки
- •9.4. Формирование строки из массива слов
- •9.5. Слова-палиндромы
- •9.6. Выделение чисел из строки
- •9.7. Сравнение строк
- •9.8. Обработка многострочного текста
- •10. Тип данных, определенный пользователем. Структуры
- •10.1. Описание структуры. Область видимости. Понятие метода
- •10.2. Оператор With
- •10.3. Ввод массива структур
- •10.4. Вывод массива структур
- •10.5. Поиск в массиве структур
- •10.6. Формирование нового массива из некоторых элементов исходного массива
- •10.7. Сортировка массива структур
- •11. Использование подпрограмм
- •11.1. Определение процедуры и функции. Описание процедуры и функции
- •11.2. Передача параметров по ссылке и по значению
- •11.3. Формальные параметры и фактические переменные
- •11.4. Локальные и глобальные переменные
- •11.5. Static-переменные
- •Приложение 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
- •Список литературы
Для обработки элементов, стоящих на любой диагонали, достаточно одного цикла. Для обработки элементов, принадлежащих к одному из треугольников, необходимо использовать вложенные циклы.
9. Обработка строк
Строка – это некоторый набор символов, в том числе и пустой. Для обозначения строки используются кавычки ("). Пустая строка обозначается парой кавычек, между которыми нет ни одного символа, в том числе и пробела (s ="").
Строки описываются с помощью типа String. Каждая строка может содержать до двух миллиардов символов в формате Unicode. Объем памяти, занимаемой строковой переменной, зависит от количества символов в этой строке. Чем больше символов, тем больше памяти требуется для хранения этой строки.
Число символов в строке называется длиной строки. Длина пустой строки равна нулю. Все символы в строке последовательно пронумерованы. Нумерация идет слева направо и начинается с единицы. Номер символа в строке также называют позицией символа.
Подстрока – это любой фрагмент строки, состоящий хотя бы из одного символа исходной строки. Например, в строке "электростанция"содержится подстрока"рост". Левой подстрокой называется такая подстрока, которая начинается с первого символа исходной строки. В нашем случае левой подстрокой будет"элек". Правая подстрока – это подстрока, которая заканчивается последним символом исходной строки. В нашем примере это будет подстрока"станция".
Конкатенацией двух строк s1иs2называется строкаs, для которойs1является левой подстрокой,s2– правой подстрокой, а длина строкиsравна сумме длин строкs1иs2. Часто конкатенацию называют сложением или склейкой строк. В Visual Basic 2005 она обозначается знаком плюс.
s = s1 + s26
Строковое выражение – это либо отдельная строка, либо строка и строковое выражение, между которыми стоит знак конкатенации.
9.1. Основные функции обработки строк
Strings.Len(Строка)– возвращает количество символов в строке, то есть ее длину. Например,Strings.Len("Окно")вернет значение 4.
Strings.Left(Строка, Длина)– выделяет левую подстроку указаннойДлиныиз заданнойСтроки. Например, Strings.Left("Пароход", 3) вернет строку "Пар".
Strings.Right(Строка, Длина)– выделяет правую подстроку указаннойДлиныиз заданнойСтроки. Например, Strings.Right("Пароход", 3) вернет строку "ход".
Strings.Mid(Строка, Позиция, Длина)– выделяет подстроку заданнойДлиныиз исходнойСтроки, начиная с указаннойПозиции. Например,Strings.Mid("Пароход", 2, 4) вернет строку "арох". ПараметрДлинаможет отсутствовать. В этом случае функцияStrings.Mid возвращает правую подстроку, которая начинается с заданнойПозиции. Например,Strings.Mid("Пароход", 4)вернет строку"оход". ФункцияMidможет стоять не только справа от знака присваивания, но и слева. В этом случае префиксStringsне ставится. Если функцияMidстоит слева от знака присваивания, то соответствующая подстрока исходной Строки будет заменена на значение строкового выражения, стоящего в правой части оператора присваивания. При этом длина исходной строки не меняется. Примеры:
s = "Иванов"
Mid(s, 1, 4) = "Петр"
После выполнения оператора присваивания в переменную sбудет записано"Петров". То есть первые четыре символа исходной строки будут заменены на четыре символа из другой строки.
s = "Иванов"
Mid(s, 1, 4) = "Пят"
После выполнения оператора присваивания в переменную sбудет записано"Пятнов". Так как во второй строке всего три символа, то в исходной строке будут изменены только первые три символа, а четвертый останется неизменным.
s = "Иванов"
Mid(s, 1, 3) = "Александр"
После выполнения оператора присваивания в переменную sбудет записано"Аленов". Первые три символа исходной строки меняются на первые три символа второй строки. Остальная часть второй строки в преобразовании не участвует.
Другой пример использования функции Strings.Midдля посимвольной обработки строки рассмотрен в разделе 9.3.
Strings.InStr(Старт, Строка, Подстрока)– ищетПодстрокувСтроке, начиная с указанной стартовой позиции. Стартовую позицию можно не указывать, тогда процесс поиска начинается с первого символа строки. При этом функция записывается в следующем виде:Strings.InStr(Строка, Подстрока). Не зависимо от формы записи результатом функции является число, которое показывает, с какой позиции начинается искомая подстрока. Символы строки нумеруются, начиная с единицы. Если искомаяПодстрокане найдена, то функция возвращает ноль. Рассмотрим примеры.
Strings.InStr("абракадабра", "бра")даст результат 2, так как первый раз подстрока "бра" начинается со второго символа строки.
Strings.InStr(4, "абракадабра", "бра")даст результат 9, так как поиск начнется с четвертого символа строки и будет найден второй слог "бра", который начинается с девятого символа строки.
Strings.InStr("абракадабра", "кот")даст результат 0, так как подстрока "кот" в слове "абракадабра" не встречается.
Strings.InStrRev(Строка, Подстрока, Старт)тоже ищетПодстрокувСтроке, начиная с указанной стартовой позиции, но поиск идет справа налево, от конца строки к началу. Стартовая позиция отсчитывается отлевогокрая строки. Результатом работы функции будет номер позиции, с которой начинается искомая подстрока. Этот номер тоже отсчитывается отлевогокрая строки. Рассмотрим примеры.
Strings.InStrRev("абракадабра", "бра")даст результат 9, так как последнее вхождение подстроки "бра" начинается с девятого символа строки.
Strings.InStrRev("абракадабра", "бра", 7)даст результат 2, так как поиск начнется с седьмого символа строки и пойдет к началу строки. Поэтому будет найден слог "бра", стоящий в начале строки.
Strings.StrReverse(Строка)– записывает все символы строки в обратном порядке. Например,Strings.StrReverse("книга")вернет"агинк".
Strings.Replace(Строка, Найти, Заменить, Старт, Количество, Метод сравнения)– в заданнойСтрокефункция ищет подстрокуНайтии заменяет ее на подстрокуЗаменить. Поиск начинается с указанной стартовой позиции и выполняется не более чем требуемоеКоличество замен. Если стартовая позиция не указана, то поиск начинается с первого символа исходной строки. Если же стартовая позиция указана и отличается от единицы, то предшествующая ей часть строки будет удалена. Если не указано требуемоеКоличествозамен, то будут выполнены все возможные замены.Метод сравненияопределяет режим сравнения исходнойСтрокии подстрокиНайти. Этот параметр может иметь одно из двух значений:CompareMethod.BynaryиCompareMNethod.Text. В первом случае строки сравниваются с учетом регистра, когда строчная и прописная буквы считаются разными. Этот режим выбирается по умолчанию. То есть если при вызове функцииМетод сравненияне указан, то сравнение будет происходить с учетом регистра. Во втором случае строки сравниваются без учета регистра, при этом Visual Basic 2005 не делает различия между строчными и прописными буквами. Примеры.
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр") даст результат "Петров Петр Петрович".
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр", 1, 2) даст результат "Петров Петр Иванович".
Strings.Replace("Иванов Иван Иванович", "Иван", "Петр", 8, 1) даст результат "Петр Иванович".
Strings.UCase(Строка) – преобразует все строчные буквы исходнойСтрокив прописные.
Strings.LCase(Строка)– преобразует все прописные буквы исходнойСтрокив строчные. Примеры.
Strings.UCase("Visual Basic")даст результат "VISUAL BASIC".
Strings.LCase("Visual Basic")даст результат "visual basic".
Strings.StrConv(Строка, Режим преобразования)– преобразует строчные и прописные буквы в исходнойСтроке. При этом может использоваться один их трех основныхРежимов преобразования.
vbStrConv.LowerCase– все буквы преобразуются в строчные (аналог функцииStrings.LCase).
vbStrConv.UpperCase– все буквы преобразуются в прописные (аналог функцииStrings.UCase).
vbStrConv.ProperCase– первая буква каждого слова будет прописной, а остальные – строчными.
Strings.LTrim(Строка)– удаляет все пробелы, стоящие в началеСтроки,до первого символа, который не является пробелом.
Strings.RTrim(Строка)– удаляет все пробелы, стоящие в концеСтроки,до ближайшего символа, который не является пробелом.
Strings.Trim(Строка)– удаляет все пробелы, стоящие в начале и в концеСтроки. Пробелы, стоящие в серединеСтроки, остаются без изменений.
Strings.Space(Количество) – формирует строку, состоящую из заданногоКоличествапробелов.
Strings.StrDup(Количество, Символ)– формирует строку, состоящую из заданногоКоличестваповторений указанногоСимвола.
Strings.LSet(Строка, Длина)– формирует строку указаннойДлины. Если исходнаяСтрокадлиннее, чем требуется, то ее правая часть теряется. Если исходнаяСтрокакороче, чем требуется, то она будет дополнена справа необходимым количеством пробелов. Другими словами, происходит выравнивание строки по левой границе.
Strings.RSet(Строка, Длина)– формирует строку указаннойДлины. Если исходнаяСтрокадлиннее, чем требуется, то ее правая часть теряется. Если исходнаяСтрокакороче, чем требуется, то она будет дополнена слева необходимым количеством пробелов. Другими словами, происходит выравнивание строки по правой границе.
Strings.StrComp(Строка1, Строка2, Режим сравнения)– сравнивает две строки и возвращает один из трех результатов: 1 (еслиСтрока1больше, чемСтрока2), 0 (если строки равны) или -1 (еслиСтрока1меньше, чемСтрока2).Режим сравненияопределяет способ сравнения строк. Этот параметр может иметь одно из двух значений:CompareMethod.BynaryиCompareMNethod.Text. В первом случае строки сравниваются с учетом регистра, когда строчная и прописная буквы считаются разными. Этот режим выбирается по умолчанию. Во втором случае строки сравниваются без учета регистра, при этом Visual Basic 2005 не делает различия между строчными и прописными буквами. Правила сравнения двух строк будут подробно рассмотрены в разделе 9.7.
Val(Строка)– функция пытается преобразовать указанную строку в число. Преобразование прерывается при первой же ошибке. Если исходнаяСтроканачинается не с цифры, а с символа, то функция возвращает значение 0. Примеры различных преобразований приведены в таблице 12.
Таблица 12
Исходная строка |
Результат функции Val |
"12" |
12 |
"12а" |
12 |
"1а2" |
1 |
"а12" |
0 |
"аб" |
0 |
"0" |
0 |
Str(Число)– преобразует число в строку. Перед положительными числами функция ставит один пробел.
Strings.Asc(Строка)– возвращает ASCII7код первого символаСтроки.
Strings.Chr(Код)– возвращает символ, соответствующий заданному ASCIIкоду.
Strings.Split(Строка, Разделитель, Количество)– формирует массив из слов, содержащихся вСтроке. Каждое слово записывается в отдельный элемент массива. Признаком конца очередного слова является появление в строке подстрокиРазделитель. ЕслиРазделительне указан, то признаком конца слова является пробел. Результирующий массив следует описывать как массив с неизвестной верхней границей. Нумерация слов в массиве идет с нуля. Если параметрКоличествоне указан, то каждое слово будет записано в отдельный элемент массива. Если жеКоличествозадано, то результирующий массив будет состоять не более чем из требуемогоКоличестваэлементов. Если в строке содержится больше слов, чем указано в параметреКоличество, то в последнем элементе массива в виде одного «слова» будет храниться вся необработанная часть строки. Если в строке идут два разделителя подряд, например, два пробела, то в массив слов вставляется пустое слово, и соответствующий элемент массива будет содержать пустую строку. Пример использования функцииStrings.Splitрассмотрен в разделе 9.3.
Strings.Join(Массив слов, Разделитель)– формирует строку изМассиваслов, разделяя слова с помощью указанной строки –Разделителя. ЕслиРазделительне указан, то слова разделяются одним пробелом. За последним словом массиваРазделительне ставится. Пример использования функцииStrings.Joinрассмотрен в разделе 9.4.