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

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

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

2017-12-12 255
Объявление и обработка символов 0.00 из 5.00 0 оценок
Заказать работу

Тема 9

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

И строковых данных

 

 

Средства Visual Basic

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

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

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

 

 

Рис. 4.9.4-1. Форма проекта Пример 4.9.4-1 Рис. 4.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

4.9.5 Базовые алгоритмы обработки строк
и примеры их программирования

 

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

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

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

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

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

 

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

 

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

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

Function Pr951(ByVal row As String, _ ByVal simvol As String) As Integer Dim kol, i As Integer Dim tmp As String kol = 0 For i = 0 To row.Length - 1 tmp = row.Substring(i,1) If tmp = simvol Then kol = kol + 1 End If Next Return kol End Function Private Sub Button1_Click(…) Dim r As String Dim s As Char s = CChar(InputBox("Введите символ")): r = TextBox1.Text Label2.Text = "Кол.найденных символов в строке=" & Pr951(r, s) End Sub

 

Рис. 4.9.5-1 Программный код функции Pr941()

Примера 4.9.5-1

 

Параметрами функции Pr951() являются строка row и переменная simvol. В цикле происходит выделение символа с помощью метода Substring(). Параметр row – наша исходная строка, i – параметр цикла, который будет изменяться в цикле от нуля (начало строки) до конца строки – за это отвечает метод Length. Cчетчик kol = kol + 1 обеспечивает подсчет количества заданного символа.

 

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

Параметрами функции Pr952() являются строка row и переменная sim. В методе Replace() используем в качестве параметров исходную строку row, в качестве заменяемой подстроки используем пробел и подстроку, на которую заменяется подстрока – sim. Цель применения операции логического отрицания Not очевидна, т.к. оператор row = row.Replace(" ", sim) будет выполняться тогда, когда логическое выражение будет иметь значение True. Программный код приведен на рис. 4.9.5-2.

 

Function Pr952(ByVal row As String, ByVal simvol As Char) As String Dim zamena As Boolean If Not zamena Then row = row.Replace(" ", simvol) Else row = row.Replace(simvol, " ") End If zamena = Not zamena Return row End Function Private Sub Button1_Click(…) Dim r As String, s As Char r = TextBox1.Text s = CChar(InputBox("Введите символ")) Label2.Text = "Результирующая строка: " & Pr952(r, s) End Sub

 

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

 

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

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

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

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

 

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

Примера 4.9.5-3


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

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

 

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 'Функция ввода исходных данных из TextB ox 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

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

И строковых данных

 

 

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

 

Управление электронными документами во многих сферах деятельности является очень важной задачей. В связи с этим VB предоставляет различные механизмы как для работы с текстовыми документами, так и для обработки их содержимого. Наиболее общим типом документов является неформатированный текстовый файл, который состоит из слов, букв, цифр и специальных символов различного назначения.

Известно, что наряду с числовыми данными компьютер может хранить и обрабатывать текстовую информацию. Это, например, тексты документов MS Word, текстовые поля форм VS, текстовые поля баз, данных и др.

Наиболее часто используемой операцией, которая применяется, например, при упорядочивании данных, является сортировка, т.е. символьные данные сравниваются между собой. В программировании, прежде чем сравнить один символ с другим, он должен быть преобразован в число с помощью таблицы ASCII (American Standard Code for Information Interchange – Американский стандартный код для обмена информацией). Поддерживает кодирование 128 буквенно-цифровых символов.

Первые 32 кода базовой таблицы, начиная с нулевого, отданы разработчикам аппаратных средств (в первую очередь производителям компьютеров и печатающих устройств). В этой области размещаются так называемые управляющие коды, которым не соответствуют никакие символы языков, и, соответственно, эти коды не выводятся ни на экран, ни на устройства печати, но используются для функций управления (например, возврата каретки или возврата на один символ).

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

Начиная с кода 32 по код 127 размещены коды символов английского алфавита, знаков препинания, цифр, арифметических действий и некоторых вспомогательных символов. Базовая таблица кодировки ASCII показана в табл. 4.9.1-1.


 

Таблица 4.9.1-1. Базовая таблица кодировки ASCII

 

 

Наиболее распространенной в настоящее время является кодировка Windows 1251 (табл. 4.9.1-2) с учетом широкого использования операционных систем и других продуктов этой компании в России.

 

Таблица 4.9.1-2. Таблица кодировки Windows 1251

 

 

В 1991 г. появился новый международный стандарт Unicode
16-разрядная система кодирования, совместимая с системой ASCII. В Unicode под один символ отводится не один байт, а два, поэтому с его помощью можно закодировать не 256, а 65536 различных символов. Полная спецификация стандарта Unicode охватывает символы различных письменностей латинской, кириллической, греческой, а также языков, использующих иероглифы, например, китайского и японского.

Каждый из символов, который содержится на клавиатуре, имеет свой код ASCII. Специальные «управляющие» символы, такие как табуляция, перевод строки и возврат каретки, имеют коды с 0 по 31, базовые символы клавиатуры имеют коды с 32 по 127. Например, буква a (латинская) в нижнем регистре соответствует ASCII-коду 97, а буква A (тоже латинская) в верхнем регистре соответствует ASCII-коду 65. В результате VB при сортировке или при выполнении других операций считает эти два символа различными. Коды с 128 по 255 в таблице ASCII содержат символы национальных языков, греческие символы, символы псевдографики и некоторые другие.

Для работы с символами в языке VB имеется ряд встроенных функций. Приведем ряд примеров.

Чтобы определить ASCII-код конкретной буквы, можно использовать функцию языка VB Asc(). Например, следующий оператор присваивает целочисленной переменной a число 122 (ASCII-код строчной буквы z):

 

Dim a As Short a = Asc("z")

 

С помощью функции Chr() можно преобразовать ASCII-код в символ. Например, следующий код присваивает символьной переменной символ z:

 

Dim l As Char l = Chr(122)

 

Считается, что символ больше, чем другой символ, если его ASCII-код больше. Например, ASCII-значение буквы B больше, чем ASCII-значение буквы А, так что выражение "А" < "В" истинно, а выражение "А" > "В" – ложно.

 

 


Поделиться с друзьями:

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.13 с.