INFONKO.RU

Алгоритмы обработки символьных данных

Тема 9

Алгоритмы обработки символьных данных

Объявление и обработка символов

Объявление и инициализация строк

Средства для ввода/вывода и отображения строк

Средства для ввода/вывода и отображения строк

Средства Visual Basic и Framework.NET для обработки строк

Базовые алгоритмы обработки строки

Примеры их программирования

4.9.6. Тестовые задания

Лабораторная работа по теме «Программирование алгоритмов обработки символьных и строковых данных»

Объявление и инициализация строк

Строковые переменные являются данными типа String и должны быть объявлены следующим образом:

DimИмяПеременнойAs String

Присвоение значений переменным строкового типа, как и переменным других типов, производится либо при объявлении переменной (при инициализации), либо оператором присваивания:

DimИмяПеременнойAs String = "строка символов" ИмяПеременной = СтроковоеВыражение

Где, СтроковоеВыражение представляет собой:

· строковый литерал – последовательность символов, заключенных в двойные кавычки;

· строковую именованную константу либо строковую переменную;

· результат операции с участием строковых выражений;

· результат любого допустимого выражения, преобразованного в строковый тип.

Строковая именованная константа должна быть обязательно инициализирована при объявлении:

Const name = "ГОУ ""МТУСИ"""

Обратите внимание, что если в строку нужно включить двойную кавычку, то после нее ставят еще одну двойную кавычку.

Как известно, во избежание неконтролируемых неявных преобразований типов всегда необходимо использовать режим строгого контроля типов, включаемый оператором Option Strict On. Причем для явного преобразования любого числового типа в строку можно использовать функцию CStr() или метод ToString() класса Convert.

Dim chislo As Double chislo = 3.14 Dim str1 As String = Convert.ToString(chislo) Dim str2 As String = CStr(chislo)

Напомним также, что обратное преобразование из строки в число можно выполнить с помощью функции Val(), CDbl(), CInt() и т.д. или с помощью соответствующих методов класса Convert:Convert.ToDouble(), Convert.ToInt32( ) и т.д.

Например:

Dim chislo As Integer = Convert.ToInt32(TextBox1.Text) Dim dlina As Double = Convert.ToDouble(TextBox2.Text) Dim v As Single = CSng(TextBox3.Text)

В Теме 2 настоящего пособия были подробно изложены средства явных преобразований. Еще раз обращаем внимание на то, что в числовой переменной разделителем целой и дробной частей является точка, а в строке – запятая, в противном случае произойдет ошибка. Это относится ко всем вышеперечисленным функциям и методам, кроме функции Val(), которая в качестве разделителя целой и дробной частей принимает только точку. Во избежание ошибок необходимо перед преобразованием строки в число проверять разделитель целой и дробной частей.



Средства для ввода/выводаи отображения строк

Простейшим способом отображения в программе текстовых строк, вводимых с клавиатуры, а, следовательно, и из текстового файла, яв­ляется использование объекта текстового поля. Как известно, объекты текстового поля могут иметь любые размеры. Если содержимое текстовой информации не помещается в текстовое поле, к текстовому полю можно добавить полосы прокрутки так, чтобы пользователь смог увидеть весь текст.

Для ввода строковых данных и отображения их на форме могут использоваться известные элементы управления TextBox, ListBox, ComboBox. Причем для отображения нескольких строк в текстовом поле свойство Multilineустанавливается в значении True.Для отображения строковой информации на форме, не подлежащей редактированию пользователем, используется элемент управления Label. Отображать текстовую информацию в качестве заголовков можно также на кнопках, в заголовке окна формы и т.д. Для отображения используется свойство Text этих элементов. Например,

Label1.Text="Введите место рождения"

Для того чтобы текст оставался до определенного времени невидимым, его свойству Visible первоначально надо присвоить значение False, а затем, когда нужно это поле отобразить, свойству Visibleприсваивается значение True.

Напомним, что типы данных в VB являются классами и управляются из пространства имен System, а классы, в свою очередь, состоят из методов и свойств.

Значение свойства Text всех элементов управления имеет тип String. Поэтому для записи числового значения в свойство Textэлемента управления необходимо произвести явное преобразование в тип String, например методом ToString соответствующего типа данных или соответствующей встроенной функцией CStr():

Dim ЧислоДней As Integer = 31 Label1.Tex t = ЧислоДней.ToString Label2.Text = CStr(ЧислоДней)

Здесь переменная ЧислоДней обрабатывается методом ToString(),который принадлежит классу Integer или функцией CStr(). Для явного преобразования можно также воспользоваться методом класса Convert:

Label1.Text = Convert.ToString(ЧислоДней)

При включенном режиме строгого контроля типов Option Strict On отсутствие явного преобразования вызовет ошибку.

Значение, вводимое из поля Textэлементов TextBox, ListBox,
ComboBox
в переменные числовых типов, также надо преобразовывать из строки в число. Для этого существуют соответствующие функции VBи методы класса Convert:

Dim ЧислоДней As Integer = Convert.ToInt32(TextBox1.Text) Dim Длина As Double = Convert.ToDouble(TextBox2.Text) Dim Скорость As Single = CSng(TextBox3.Text)

Пример 4.9.4-1. Создать проект, который вводит с клавиатуры строки a и b, отображает их на форме, а затем обрабатывает, удаляя из строки a все символы, входящие в строку b и расположенные на нечетных позициях строки b, результат обработки необходимо отобразить на форме.

Форма интерфейса пользователя приведена на рис. 4.9.4-1.

Схема алгоритма обработки представлена на рис. 4.9-4-2.

Рис. 9-4-1. Форма проекта Пример 9.4-1 Рис. 9-4-2. Схем алгоритма

процедуры Обработка()

Примера 4.9.4-1

Программный код проекта представлен на рис. 4.9.4-3. Он содержит процедуры vvod(), vivod()и Обработка().

Public Class Form1 'Процедура вывода результата в TextBox Sub vivod(ByVal z As String, ByRef t As TextBox) If z.Length 0 Then t.Text = z Else t.Text = "Все удалено" End If End Sub 'Функция ввода исходных данных из TextBox Function vvod(ByVal T As TextBox) As String Return T.Text End Function Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim Str1, Str2 As String Str1 = vvod(TextBox1) : Str2 = vvod(TextBox2) Обработка(Str2, Str1) : vivod(Str1, TextBox3) End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click End End Sub 'Процедура решения задачи удаления символов из строки Sub Обработка(ByVal b As String, ByRef a As String) Dim d, m, i, j As Short m = CShort(a.Length)'длина строки a d = CShort(b.Length)'длина строки b For i = 0 To CShort(d - 1) Step 2 'перебор нечетных симв. строки b j = 0 Do While j < m'перебор всех символов строки a If a.Substring(j, 1) = b.Substring(i, 1) Then a = a.Remove(j, 1)'пока симв.совпад. удаляем из a m = CShort(m - 1)'уменьшаем длину строки a Else j = CShort(j + 1)'переход к след.символу строки a End If Loop Next i End Sub End Class

Рис. 4.9.4-3. Программный код проекта Пример 9.4-1

Рис. 4.9.4-5. Результаты выполнения проекта Пример 9.4-1

Примеры их программирования

Функции и методы для работы со строками помогли познакомится с возможностями обработки строк и символов в VB. При решении задач следует научиться находить необходимые функции, понимая их предназначение, а также использовать в совокупности простые приемы обработки строк (назовем их базовыми алгоритмами), среди которых можно выделить следующие:

· Определение количества символов в строке при заданных условиях (Пример 4.9.5-1).

· Замена или вставка символов в строке (Пример 4.9.5-2).

· Удаление символа в строке (Пример 4.9.5-3).

· Анализ символа на принадлежность к группе (Пример 4.9.5-4).

· Подсчет количества фрагментов (Пример 4.9.5-5).

· Формирование строки из слов при заданных условиях исходной строки (Пример 4.9.5-6).

Данные базовые алгоритмы можно использовать не только для решения учебных задач, но и для разработки текстовых редакторов, программного обеспечения, предназначенного для верстки текста, и т.д.

Пример 4.9.5-4. Разработать процедуру-Function, которая определяет, сколько в исходной строке символов Simvol_1 и Simvol_2. Под группой понимается принадлежность символа к гласным или согласным буквам русского или латинского алфавита, цифрам, строчным или прописным буквам.

Параметрами функции Pr954() являются строка row и переменные
simvol_1 и simvol_2. В функции Pr954() используем функцию
Substring(), которая выделит символ и поместит его в ячейку tmp. Затем содержимое ячейки сравнивается со введенными пользователем символами и, если условие истинно, то счетчик увеличивается на единицу. Программный код приведен на рис. 4.9.5-4.

Function Pr954(ByVal row As String, ByVal simvol_1 As Char, _ ByVal simvol_2 As Char) As Integer Dim i, kol As Integer Dim x, tmp As String x = CStr(Len(row)) For i = 1 To CInt(x) tmp = row.Substring(i, 1) If tmp = simvol_1 Or tmp = simvol_2 Then kol = kol + 1 Next Return kol End Function Private Sub Button1_Click(…) Dim r As String Dim s_1, s_2 As Char r = TextBox1.Text s_1 = CChar(InputBox("Введите первый символ")) s_2 = CChar(InputBox("Введите второй символ")) Label2.Text = "Всего символов " & s_1 & "и" & s_2 & " = " _ & Pr954(r, s_1, s_2) End Sub

Рис. 4.9.4-4. Программный код процедуры Pr954()

Примера 4.9.5-4

Пример 4.9.5-5. Разработать процедуру-Function, которая опредеяет, сколько раз подстрока Row_1 входит в исходную строку.

Функция Pr955() использует метод IndexOf(), который возвращает позицию подстроки Row_1 в исходной строке Row, при этом счетчик будет увеличиваться на единицу при каждом нахождении подстроки. В противном случае произойдет досрочный выход из цикла с помощью оператора
Exit Do.

Программный код приведен на рис. 4.9.5-5.

Function Pr955(ByVal row As String, ByVal row_1 As String) _ As Integer Dim i, kol As Integer Dim x As String i = 1 Do x = CStr(row.IndexOf(row_1, i)) If CDbl(x) > 0 Then i = CInt(CDbl(x) + Len(row_1)) kol = kol + 1 Else Exit Do End If Loop Pr945 = kol End Function Private Sub Button1_Click(…) Dim r, r_1 As String r = TextBox1.Text r_1 = InputBox("Введите подстроку") Label2.Text = "Всего вхождений подстроки" & _ r_1 & "в строку " & Pr955(r, r_1) End Sub

Рис. 4.9.5-5. Программный код процедуры Pr952()

Примера 4.9.5-5


Пример 4.9.5-6. Разработать процедуру-Function, которая находит в заданной строке все слова, состоящие только из цифр, и записывает найденные слова в новую строку через пробел. Если таких слов нет, то результатом процедуры должна быть строка с сообщением.

21.

4.9.7. Лабораторная работа по теме
«Программирование алгоритмов обработки
символьных и строковых данных»

Цель работы: изучить средства языка программирования при обработке строковых данных, приемы совместной обработки строковой и числовой информации, функции, методы и элементы управления, предназначенные для работы со строковыми и символьными данными.

Вопросы, подлежащие изучению

1)Способы объявления строковых переменных.

2)Инициализация строк.

3)Классы и методы .NET Framework для работы со строками.

4)Методы преобразования строки в число и наоборот.

5)Конкатенация строк.

6)Элементы управления для работы со строками.

4.9.7.2. Общее задание на разработку проекта

1) Изучите вопросы программирование алгоритмов обработки символьных и строковых данных (Тема 9).

2) Выберите вариант задания из табл. 4.9.7-1.

3) Разработайте графический интерфейс пользователя.

4) Разработайте схемы алгоритмов процедур пользователя в соответствии с индивидуальным заданием, предварительно проведя формализацию.

5) Напишите программный код процедур в соответствии с разработанными схемами алгоритмов.

6) Разработайте проект приложения, решающий поставленную задачу, который состоит из интерфейса пользователя и соответствующего программного кода. Все пользовательские процедуры должны находиться в модуле формы. Обмен данными между пользовательскими процедурами должен осуществляться через параметры, без использования глобальных переменных.

7) Выполните приложение и получите результат.

8) Докажите правильность результата.


Варианты индивидуальных заданий

Таблица 4.9.7-1

Задача
1) В заданной строке определите наибольшее количество цифр, идущих подряд.
2) Зашифруйте строку, содержащую русские буквы, пробелы и знаки препинания: замените каждую букву, непосредственно следующей за ней по алфавиту (например, "я" на "а"), строчную букву преобразуйте в прописную, прописную – в строчную.
3) В заданной строке, состоящей из слов, разделенных одним или более пробелами, определите количество слов, начинающихся и заканчивающихся на одну и ту же букву.
4) В заданной строке, состоящей из слов, разделенных одним или более пробелами, замените каждое третье слово «мама» словом «мамочка» и подсчитайте количество проведенных замен.
5) Из заданной строки удалите все символы, входящие в нее более одного раза.
6) Преобразуйте заданную строку, повторив в ней каждый символ, совпадающий с заданным.
7) Определите, можно ли из символов заданной строки составить вашу фамилию.
8) В заданной строке определите максимальную длину подстроки, состоящей из заданного символа.
9) Исключите из заданной строки группы символов, расположенные между круглыми скобками, включая сами скобки. Предполагается, что внутри каждой пары скобок нет других скобок.
10) В заданной строке, состоящей из слов, разделенных одним или несколькими пробелами, определить количество слов четной длины, в которых нет буквы «а».
11) В заданной строке, состоящей из слов, разделенных одним или несколькими пробелами, определите количество слов, которые содержат ровно три буквы «а».
12) В заданной строке, состоящей из слов, разделенных одним или несколькими пробелами, определите самое длинное слово нечетной длины.
13) В заданной строке, состоящей из слов, разделенных одним или более пробелами, определите самое короткое слово четной длины.
14) Строка содержит дату в формате "mm-dd-yyyy", где mm – месяц, dd – день, yyyy – год. Проверьте корректность задания даты и получите строку с датой в формате "dd.mm.yy", где yy – две последние цифры года.
15) Из заданной строки, не содержащей цифр, получите "сжатую" строку, заменив самую длинную подстроку вида "XXX…XX" на подстроку вида "nX", где X – повторяющийся символ, n – число его повторений.
16) Определите, является ли заданная строка записью целого числа, записью вещественного числа, или строку нельзя преобразовать в число.
17) Из всех символов заданной строки получите новую строку, записывая каждый символ исходной строки только один раз.
18) В заданной строке подсчитайте сумму цифр.
19) В заданной строке, не содержащей букв русского алфавита, найдите процент гласных букв (a, e, i, o, u, y).
20) Для заданной строки, состоящей из слов, разделенных одним или несколькими пробелами, определите, какое слово встречается раньше: самое короткое или самое длинное.
21) В заданной строке, состоящей из слов, разделенных одним или более пробелами, удалите из каждого слова нечетной длины средний символ и подсчитайте их количество.
22) В заданной строке, состоящей из слов, разделенных одним или более пробелами, подсчитайте количество симметричных слов, т.е. читающихся одинаково слева направо и справа налево.
23) Определите, является ли заданная строка записью вещественного числа с нулевой дробной частью.
24) Из строки, содержащей корректно заданную дату в формате "dd.mm.yy", где dd – день, mm – месяц, yy – год, получите строку с датой, отстоящей от заданной на n дней вперед, в том же формате.
25) Определите, расположены ли символы заданной строки в алфавитном порядке.
26) Определите, является ли заданная строка записью целого числа.
27) Определите позицию n-ого с конца вхождения заданного символа в заданную строку символов. При отсутствии n-ого вхождения установите номер позиции равным-1.
28) Строка состоит из "слов" длиной менее 10 символов, разделенных запятыми. Преобразуйте строку, заменив запятые группами пробелов так, чтобы каждое слово начиналось с позиции 10*(k - 1) + 1, где k – номер "слова".
В заданной строке, состоящей из слов, разделенных одним или более пробелами, вставьте в середину каждого слова четной длины букву «К» и найдите количество вставок.
30) Из строки, содержащей корректно заданную дату в формате "dd.mm.yy", где dd – день, mm – месяц, yy – год, получите строку с датой, отстоящей от заданной на n дней назад, в том же формате.

Содержание отчёта

1)Тема и название лабораторной работы.

2)Фамилия, имя студента, номер группы, номер варианта.

3)Задание на разработку проекта.

4)Формализация и уточнение задания.

5)Формализация и уточнение задания.

5.1) графический интерфейс пользователя;

5.2) таблица свойств объектов;

5.3) схема алгоритма решаемой задачи;

5.4) программный код проекта.

6)Результаты выполнения проектов.

7)Доказательство правильности работы программы.

4.9.7.5. Пример выполнения задания

1) Тема и название лабораторной работы:

Обработка строковых данных:

Совместная обработка строковой и числовой информации.

2) Фамилия, имя студента, номер группы, номер варианта:

Иванов И., БИН1405, вариант 13.

3) Задание на разработку проекта:

Создайте проект, который реализует задачу ввода с клавиатуры строк a и b, отображает их на форме, а затем обрабатывает, удаляя из строки a все символы, входящие в строку b и расположенные на нечетных позициях строки b. Результат обработки отобразите на форме.

4) Формализация и уточнение задания:

Формализация не требуется

5) Элементы, разрабатываемого проекта:

5.1) Графический интерфейс пользователя:

Форма приложения может иметь такой же вид, как на рис. 4.9.7-1.

Рис. 4.9.7-1. Форма проекта Проект 9

5.2) Таблица свойств объектов:

Определите, установите и сведите свойства в табл. 4.9.7-2.

Таблица 4.9.7-2

Имя Свойство Значение свойства
Form1 Name Form1
Text Тема 4.9: Обработка строковых данных
Label1 Text Задание: Ввести с клавиатуры строку, а удалить из нее все символы, стоящие в строке b на нечетных позициях.
ImageAlign MiddleCenter
Label2 Text Строка a
ImageAlign MiddleCenter
Label3 Text Строка b
Label4 Text Результат
TextBox1 Name TextBox1
TextBox2 Name TextBox2
TextBox3 Name TextBox3
Button1 Name Button1
Text Обработка
Button2 Name Button2
Text Конец обработки

5.3) Алгоритмы решения задачи:

Схема алгоритма процедуры Обработка()представлена на
рис. 4.9.7-2.

Рис. 4.9.7-2. Схема алгоритма процедуры Обработка() проекта Проект 9

5.4) Программный код проекта:

Код программы разработанной задачи приведен на рис. 4.9.7-3

Public Class Form1 'Функция ввода исходных данных из TextBox Function vvod(ByVal T As TextBox) As String Return T.Text End Function 'Процедура вывода результата в TextBox Sub vivod(ByVal z As String, ByRef t As TextBox) If z.Length 0 Then t.Text = z Else t.Text = "Все удалено" End If End Sub 'Процедура решения задачи удаления символов из строки Sub Обработка(ByVal b As String, ByRef a As String) Dim d, m, i, j As Short m = CShort(a.Length) 'длина строки a d = CShort(b.Length) 'длина строки b For i = 0 To CShort(d - 1) Step 2 'перебор нечетных символов строки b j = 0 Do While j < m 'перебор всех символов строки a If a.Substring(j, 1) = b.Substring(i, 1) Then a = a.Remove(j, 1) 'пока символы совпадают–удаляем из строки a m = CShort(m - 1)'уменьшаем длину строки a Else j = CShort(j + 1) 'переход к следующему символу строки a End If Loop Next i End Sub Private Sub Button1_Click(sender As Object, _ e As EventArgs) Handles Button1.Click Dim Str1, Str2 As String Str1 = vvod(TextBox1) : Str2 = vvod(TextBox2) Обработка(Str2, Str1) vivod(Str1, TextBox3) End Sub Private Sub Button2_Click(sender As Object, _ e As EventArgs) Handles Button2.Click End End Sub End Class

Рис. 4.9.7-3. Программный код проектаПроект 9

6) Результаты выполнения проекта:

Результаты выполнения проекта приведены на рис. 4.9.7-4.

Рис. 4.9.7-4.Результаты выполнения проекта Проект 9

7) Доказательство правильности работы программы:

Дана исходная строка a="aabbssvvffgghh". В строке b="absh" на нечетных местах стоят символы "a" и "s". После их удаления строка а должна иметь вид: "bbvvffgghh".

Полученный вид строки полностью совпадает с результатом, полученным с использованием программы.

4.9.7.6. Контрольные вопросы

1)Как в программах используются переменные строкового типа?

2)Какие возможности предоставляют методы и функции класса Sysem.String?

3)Как объявляются переменные строкового типа?

4)Какими способами можно присвоить значение переменной строкового типа?

5)Понятие "преобразование типов". Что такое явное преобразование типов? Что такое неявное преобразование типов?

6)Зачем и как устанавливается режим строгой проверки типов?

7)Как преобразовать число в строку и обратно?

8)Для чего применяется конкатенация строк?

9)Какие способы конкатенации строк вы знаете?

10)Как определить количество символов в строке?

11)Какой индекс имеет первый символ строки?

12)Какие элементы управления используются для ввода и вывода строковой информации?

13)Как определить, имеется ли в строке, введённой пользователем, определённый символ и где он расположен в строке?

14)Как выделить определённую часть строки, введённой пользователем?

15)Как заменить символы в строке?

16)Как удалить символы в строке?

17)Как удалить лишние пробелы в строке?

18)Зачем и как преобразуется регистр строки?

19)Каким образом можно вставить подстроку в заданную строку?

20)Как и какими способами сравниваются строки?

21)Что делает метод Trim( )?

22)Что делает метод Split( )?

23)Что делает метод Join( )?

24)Что такое объект StringBuilder, и, какие возможности для работы со строками он предоставляет?

25)Какие классы .NET Framework используются для обработки строк?

26)Какие методы используются для обработки строк?

27)Приведите примеры методов структуры Char.

28)Приведите примеры методов класса String.

29)Поясните понятие «конструктор».

30)Напишите примеры конструкторов класса String.

Тема 9

Алгоритмы обработки символьных данных



infonko.ru/molnienosnaya-bitva-so-slonom.html infonko.ru/molniezashita-po-rekomendaciyam-mek.html infonko.ru/molniezashita-rezervuarov-i-zashita-ot-staticheskogo-elektrichestva.html infonko.ru/molniezashiti-zdanij-sooruzhenij.html infonko.ru/molochnaya-smes-pri-osobih-obstoyatelstvah.html infonko.ru/molochnih-smesej-nutrilak-06-nutrilak-612.html infonko.ru/molodaya-nemeckaya-istoricheskaya-shkola.html infonko.ru/molodaya-pisatelnica-tekkereeva.html infonko.ru/molodezh-kak-osobaya-socialnaya-gruppa-osnovnie-problemi-i-puti-ih-resheniya.html infonko.ru/molodezh-kak-osobaya-socialno-demograficheskaya-gruppa.html infonko.ru/molodezh-kak-socialnaya-gruppa.html infonko.ru/molodezhnaya-elektoralnaya-koncepciya.html infonko.ru/molodezhnaya-kultura-kak-fenomen-sferi-svobodnogo-vremeni.html infonko.ru/molodezhnaya-politika-i-molodezhnie-smi.html infonko.ru/molodezhnaya-politika-kak-obekt-gosudarstvennogo-upravleniya.html infonko.ru/molodezhnih-vzroslih-tvorcheskih-kollektivov-i-ispolnitelej.html infonko.ru/molodezhnij-klub-moyo-mnenie.html infonko.ru/molodezh-segodnya-nuzhdaetsya-v-mudrosti-i-opite-kotorij-skoncentrirovan-v-beloj-rusi-vistuplenie-tolkacha-ia-na-rasshirennom-zasedanii-respublikanskogo-soveta-roo-belaya-rus-30-yanvarya-2016-goda.html infonko.ru/molodie-specialisti-kak-osobaya-kategoriya-rabotnikov.html infonko.ru/molodih-semej-semya-schastlivoe-sozvezdie.html