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

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

 

Function Pr953(ByVal row As String, ByVal simvol As Char) As String Dim x As String, i As Byte x = CStr(Len(row)) For i = 1 To CByte(x) If Mid(row, i, 1) = simvol Then row = row.Substring(1, i - 1)+row.Substring(i + 1, CInt(x)) End If Next Return row End Function Private Sub Button1_Click(…) Dim s As Char, r As String r = TextBox1.Text : s = CChar(InputBox("Введите символ")) Label2.Text = " Результирующая строка: " & Pr953(r, s) End Sub

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

В функции Pr953() используется метод Substring(), который анализирует строку с целью нахождения в ней указанного символа. Результатом выполнения первой части (до конкатенации)
row = row.Substring(1, i - 1) + row.Substring(i + 1, CInt(x))

для слова например, мама, в котором требуется удалить символ a станет возвращенный символ M, а вторая часть возратит MA. Результатом объединения станет мма. Очевидно, что при следующем проходе останется два символа мм, которые и будут результатом.

Пример 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, которая находит в заданной строке все слова, состоящие только из цифр, и записывает найденные слова в новую строку через пробел. Если таких слов нет, то результатом процедуры должна быть строка с сообщением.

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

Sub Pr956(ByRef s As String) s = s.Trim 'цикл замены двух пробелов одним Do While s.IndexOf(Space(2)) >= 0 s = s.Replace(Space(2), Space(1)) Loop End Sub Function Reshenie(ByVal s As String) As String Dim Rez As String = "" Dim i, j, d, k As Integer Dim slovo As String Dim mas() As String = s.Split(CChar(Space(1))) 'разбиение строку на массив слов For i = 0 To mas.Length - 1 slovo = mas(i) k = 0'количество цифр в слове d = slovo.Length'длина слова For j = 0 To d - 1'цикл по одному слову If slovo.Substring(j, 1) >= "0" And _ slovo.Substring(j, 1) <= "9" Then k = k + 1 End If Next If k = d Then Rez = Rez + slovo + Space(1) End If Next If Rez = "" Then Rez = "Таких слов нет" End If Return Rez End Function Рис. 4.9.5-6. Программный код процедур Pr956()и Reshenie() Пример 4.9.4-6

Решение задачи реализует процедура-функция Reshenie(). В ней после вызова процедуры Pr956() создается строковый массив слов mas() с помощью метода Split(), которая разбивает строку на массив по признаку одного пробела.

Далее в цикле по всем элементам массива рассматривается каждое слово и во внутреннем цикле каждый символ рассматриваемого слова с помощью метода Substring() сравнивается с символами-цифрами и подсчитывается количество цифр в слове. Если это количество цифр в слове равно длине слова, значит рассматриваемое слово состоит только из цифр, и, следовательно, оно добавляется в новую результатирующую строку Rez. Если после выполнения внешнего цикла результирующая строка Rez пуста (т.е. не содержит слов), то в нее записывается сообщение "Таких слов нет".

 

 


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

 

1.Символьным (строковым) выражением является

1) последовательность букв русского или латинского алфавита, цифр или других символов, взятая в кавычки

2) последовательность букв русского или латинского алфавита

3) последовательность букв русского алфавита

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

2.Ошибочной записью символьной переменной является

1) с$

2) b

3) c1

4) нет верного ответа

3.Подсчитать количество символов в символьном выражении позволяет функция

1) Len( )

2) Left( )

3) Asc( )

4) Mid ( )

4.Операции, допустимые для строковых данных

1) >, < , = , < = , > = , <> , + , &

2) + , = , &

3) =

4) нет верного ответа

5.Метод a.Substring(0, n)

1) возвращает n первых символов строки a

2) возвращает n последних символов строки a

3) не применяется к строкам

4) находит символ, стоящий на позиции n в строке a

5) ничего не делает

6.Метод a.Substring(n, m)

1) вырезает из строки a , начиная с n-ого, m символов

2) вырезает из строки a , начиная с m-ого , n cимволов,

3) не применяется к строкам

4) нет верного ответа

7.Функция Space(n)

1) возвращает строку из n пробелов

2) возвращает строку из n первых символов

3) возвращает строку из n последних символов

4) удаляет n начальных пробелов


8.Метод a.ToUpper

1) заменяет строчные буквы строки a на прописные

2) заменяет прописные буквы на строчные

3) удаляет начальные пробелы строки

4) удаляет конечные пробелы строки

9.Метод a.ToLower

1) заменяет прописные буквы строки aна строчные

2) заменяет строчные буквы на прописные

3) удаляет начальные пробелы строкиa

4) удаляет конечные пробелы строки a

10.Метод a.TrimStart

1) удаляет начальные пробелы строки a

2) заменяет прописные буквы строки a на строчные

3) заменяет строчные буквы строки a на прописные

4) удаляет конечные пробелы строки

5) нет верного ответа

11.Метод a.TrimEnd

1) удаляет конечные пробелы строки

2) заменяет прописные буквы на строчные

3) заменяет строчные буквы на прописные

4) удаляет начальные пробелы строки

5) нет верного ответа

12.Метод a.Indexof(b, n)

1) начиная с n-й позиции строки a, определяет позицию вхождения в нее строки b

2) начиная с n-й позиции строки b, определяет позицию вхождения в нее строки a

3) заменяет n символов строки a на n символов строки b

13.Функция Chr(n)

1) возвращает символ, код ASCII которого равен числу n

2) возвращает строку из n пробелов

3) возвращает строку из n первых символов

4) возвращает строку из n последних символов

14.Функция Asc(a)

1) возвращает ASCII код первого символа строки a

2) возвращает количество символов в строке a

3) преобразует число в строку a

4) не применяется к строкам

15.Функция Val(a)

1) преобразует строку a в число, если это возможно

2) возвращает длину строки

3) определяет ASCII код строки

4) не применяется к строкам

16.Определить результат выполнения фрагмента программы

Dim a As String = "стереопроигрыватель" TextBox1.Text = a.Substring(0, 6)

1) стерео

2) O

3) нет верного ответа

4) проигрыватель

17.В результате выполнения фрагмента программы

A ="КОЗАК" a.Replace("О","А") TextBox1.Text= a

1) вторая буква будет заменена на букву «А»

2) будет вырезана буква «А»

3) будет вырезана вторая буква слова

18.Функция Ucase (a)…

1) заменяет строчные буквы на прописные cтроки а

2) заменяет прописные буквы на строчные

3) удаляет начальные пробелы строки

4) удаляет конечные пробелы строки

19.Функция Ltrim (A)…

1) удаляет начальные пробелы строки A

2) заменяет прописные буквы на строчные

3) заменяет строчные буквы на прописные

4) удаляет конечные пробелы строки

5) нет верного ответа

20.Функция Rtrim (a)…

1) удаляет конечные пробелы строки а

2) заменяет прописные буквы на строчные

3) заменяет строчные буквы на прописные

4) удаляет начальные пробелы строки


21.

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

 

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

 

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

 

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

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

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

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

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

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

 

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

 

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 дней назад, в том же формате.

 

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

 

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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".

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

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

 

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.