Введение 8 Этапы создания Windowsприложения 8
Скачать 6.98 Mb.
|
9.7. Сравнение строкСравнение строк в Visual Basic 2005 выполняется посимвольно. Сначала сравниваются первые символы строк. Если первые символы равны, сравниваются вторые, замет третьи и так далее. Вывод о том, какая строка больше, делается, как только будет найдена первая пара несовпадающих символов. Символы сравниваются по ASCII кодам. Меньшим считается символ, у которого меньше ASCII код. На основании таблицы ASCII кодов можно сформулировать несколько правил сравнения строк.
В таблице 14 приведены основные группы символов по возрастанию их ASCII кодов. Таблица 14
Пользуясь данными таблицы 14, сравним несколько строк. Результаты сравнения представлены в таблице 15. Таблица 15
В качестве примера приведем фрагмент программы, сортирующей слова в произвольной строке. Эту задачу можно решать в двух вариантах. При сортировке с учетом регистра делается различие меду строчными и прописными буквами. При сортировке без учета регистра строчные и прописные буквы не различаются. Рассмотрим оба случая. Сортировка с учетом регистра. В начале программы вводится строка текста. Затем из нее удаляются лишние пробелы, и формируется массив слов. Массив называется slova(), номер последнего элемента в этом массиве хранится в переменной n. Сортировать массив слов будем методом пузырька. Поэтому нам потребуются две дополнительные переменные. В переменной sort мы будем хранить состояние массива: отсортирован он или нет. Эта переменная будет иметь логический тип данных. Dim sort As Boolean Любая сортировка предполагает перестановку элементов массива местами. Для этого необходима дополнительная переменная. Ее тип обязательно должен совпадать с типом элементов сортируемого массива. Так как мы сортируем массив слов, то дополнительная переменная должна иметь строковый тип данных. Dim z As String Организуем внешний цикл сортировки массива. Do Сначала предполагаем, что массив уже отсортирован. sort = True Анализируем все слова, хранящиеся в массиве. Обратите внимание, что слова в массиве нумеруются с нулю. Процесс анализа необходимо остановить после обработки предпоследнего слова, которое сравнивается с последним. For i = 0 To n – 1 Сравниваем текущее слово и следующее за ним. Так как проверка выполняется с учетом регистра букв, то никаких дополнительных условий ставить не надо. If slova(i) > slova(i + 1) Then Если i-е слово больше, чем (i+1)-е, значит, массив неупорядочен. Меняем значение логической переменной. sort = False После чего переставляем местами элементы массива, используя дополнительную переменную. z = slova(i) slova(i) = slova(i + 1) slova(i + 1) = z End If Next Процесс перестановки слов в массиве продолжается до тех пор, пока все элементы массива не займут правильные места. Loop Until sort Теперь из отсортированного массива слов формируем строку. В качестве разделителя слов используем пробел. s = Strings.Join(slova, " ") Полученные результаты выводим в окно списка. Чтобы зрительно отделить исходные данные от полученных результатов сначала выводим горизонтальную черту. lstText.Items.Add("--------------------------------") Потом печатаем полученную строку, в которой все слова упорядочены с учетом регистра. lstText.Items.Add(s) Полный текст программы представлен в приложении 47. Пример работы программы приведен на рис. 64. Обратите внимание на то, что слово «Цапля», на первый взгляд, нарушает алфавитный порядок. Это вызвано тем, что оно начитается с прописной буквы, которая всегда меньше любой строчной. Рис. 64. Пример работы программы сортировки слов с учетом регистра Сортировка без учета регистра. В начале программы вводится строка текста. Затем из нее удаляются лишние пробелы, и формируется массив слов. Массив называется slova(), номер последнего элемента в этом массиве хранится в переменной n. Сортировать массив слов будем методом пузырька. Поэтому нам потребуются две дополнительные переменные. В переменной sort мы будем хранить состояние массива: отсортирован он или нет. Эта переменная будет иметь логический тип данных. Dim sort As Boolean Любая сортировка предполагает перестановку элементов массива местами. Для этого необходима дополнительная переменная. Ее тип обязательно должен совпадать с типом элементов сортируемого массива. Так как мы сортируем массив слов, то дополнительная переменная должна иметь строковый тип данных. Dim z As String Организуем внешний цикл сортировки массива. Do Сначала предполагаем, что массив уже отсортирован. sort = True Анализируем все слова, хранящиеся в массиве. Обратите внимание, что слова в массиве нумеруются с нулю. Процесс анализа необходимо остановить после обработки предпоследнего слова, которое сравнивается с последним. For i = 0 To n – 1 Сравниваем текущее слово и следующее за ним. Нам требуется сравнивать слова без учета регистра. Поэтому оба сравниваемых слова преобразуем таким образом, чтобы все их буквы были прописными. Для этого мы будем использовать функцию Strings.UCase. If Strings.UCase(slova(i)) > _ Strings.UCase(slova(i + 1)) Then Если i-е слово больше, чем (i+1)-е, значит, массив неупорядочен. Меняем значение логической переменной. sort = False После чего переставляем местами элементы массива, используя дополнительную переменную. z = slova(i) slova(i) = slova(i + 1) slova(i + 1) = z End If Next Процесс перестановки слов в массиве продолжается до тех пор, пока все элементы массива не займут правильные места. Loop Until sort Теперь из отсортированного массива слов формируем строку. В качестве разделителя слов используем пробел. s = Strings.Join(slova, " ") Полученные результаты выводим в окно списка. Чтобы зрительно отделить исходные данные от полученных результатов сначала выводим горизонтальную черту. lstText.Items.Add("--------------------------------") Потом печатаем полученную строку, в которой все слова упорядочены без учета регистра. lstText.Items.Add(s) Полный текст программы представлен в приложении 47. Пример работы программы приведен на рис. 65. Обратите внимание на положения слова «Цапля» в результирующей строке. Сравните результаты, представленные на рисунках 64 и 65. Рис. 65. Пример работы программы сортировки слов без учета регистра |