- •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.8. Обработка многострочного текста
Многострочный текст – это одномерный массив строк. Каждый элемент массива – это отдельная строка. Следовательно, для обработки многострочного текста необходимо использовать цикл, который организуется таким образом, чтобы на каждом шаге цикла полностью обрабатывать одну строку исходного текста. В остальном обработка многострочного текста ничем не отличается от обработки отдельной строки.
В качестве примера рассмотрим следующую задачу.
Дан текст, состоящий из нескольких строк. В каждой строке слова разделены произвольным количеством пробелов. Пробелы могут стоять перед первым словом и за последним. В каждой строке текста надо записать слова в обратном порядке. Исходный и преобразованный тексты вывести в окно списка.
При решении задачи нам потребуется одномерный массив строк для хранения исходного текста. Так как количество строк заранее неизвестно, то опишем массив без указания номера последнего элемента.
Dim Tekst() As String
Для организации цикла нам необходимо знать номер последней строки текста. Он будет храниться в целочисленной переменной n.
Dim n As Integer
По условию задачи к каждой строке текста надо переставить слова. Поэтому для каждой строки исходного текста мы будем формировать массив слов. Следовательно, надо объявить одномерный строковый массив, в который мы будем записывать слова.
Dim slova() As String
Для обработки массива нам необходимо знать номер последнего слова, который мы будем хранить в специальной целочисленной переменной k.
Dim k As Integer
Для организации циклов нам потребуются счетчики iиj.
Dim i, j As Integer
Вспомогательная строковая переменная sпозволит нам упростить запись операторов программы.
Dim s As String
Очищаем окно списка от предыдущих результатов работы программы.
lstText.Items.Clear()
Вводим количество строк в тексте. Так как количество строк может быть только положительным, то при вводе этого значения необходима проверка, которую мы организуем с помощью цикла Do Loop Until.
Do
n = Val(InputBox("Введите количество строк"))
Loop Until n > 0
В Visual Basic 2005 нумерация элементов массива всегда начинается с нуля. Следовательно, номер последней строки будет на единицу меньше общего количества строк текста. Поэтому уменьшаем значение переменной nна единицу. Теперь в ней хранится не количество элементов, а номер последнего элемента массива.
n -= 1
Задаем размер массива Tekst(), указывая в оператореReDimномер последнего элемента массива.
ReDim Tekst(n)
Организуем цикл для ввода всех строк текста
For i = 0 To n
Вводим очередную строку текста. Обратите внимание, при вводе строки не используется преобразование Val. Более того, использование данного преобразования является логической ошибкой, не позволяющей получить правильные результаты.
Tekst(i) = InputBox("Введите " + Str(i) + _
"-ю строку текста")
Next
В окно списка выводим исходный текст, чтобы пользователь мог контролировать результаты работы программы.
For i = 0 To n
lstText.Items.Add(Tekst(i))
Next
Организуем цикл для обработки всех строк текста.
For i = 0 To n
Копируем очередную строку во вспомогательную переменную, удаляя при этом пробелы, стоящие перед первым словом строки и за последним.
s = Strings.Trim(Tekst(i))
Удаляем из строки sлишние пробелы, заменяя два рядом стоящих пробела на один.
Do Until Strings.InStr(s, " ") = 0
s = Strings.Replace(s, " ", " ")
Loop
С помощью функции Strings.Splitформируем массив слов обрабатываемой строки.
slova = Strings.Split(s)
Определяем номер последнего элемента в массиве слов.
k = UBound(slova)
Очищаем вспомогательную переменную, записывая в нее пустую строку.
s = ""
Организуем цикл для обработки массива слов. Начальное значение счетчика цикла – ноль, так как нумерация элементов в массиве идет с нуля. Конечное значение – номер последнего слова в массиве слов. Такая организация цикла позволит нам обработать все слова текущей строки текста.
For j = 0 To k
Очередное слово строки мы будем записывать во вспомогательную переменную, добавляя его перед ранее сформированной строкой. С помощью пробела будем отделять текущее слово от всей остальной строки. Такой порядок добавления слов позволит нам записать второе слово перед первым, третье перед вторым и так далее. В результате все слова исходной строки окажутся записанными в обратном порядке.
s = slova(j) + " " + s
Next
После завершения внутреннего цикла во вспомогательной переменной записаны все слова исходной строки в обратном порядке. Остается только перенести данные из вспомогательной переменной в исходный массив, удалив при этом из строки пробелы, стоящие перед первым словом и за последним.
Tekst(i) = Strings.Trim(s)
Next
Когда внешний цикл закончит свою работу, в каждой строке слова будут записаны в обратном порядке. Нам остается только вывести измененный массив строк в окно списка. Сначала выводим горизонтальную черту, чтобы зрительно отделить исходные данные от полученных результатов.
lstText.Items.Add("--------------------------------")
Так как многострочный текст представляет собой одномерный массив строк, то для его вывода необходимо организовывать цикл.
For i = 0 To n
На каждом шаге цикла выводим в окно списка очередную строку текста.
lstText.Items.Add(Tekst(i))
Next
Полный текст программы представлен в приложении 48. Пример работы программы приведен на рис. 66.
Рис. 66.Пример работы программы обработки многострочного текста