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

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

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

FunctionPr953(ByVal row As String, ByValsimvol 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 SubButton1_Click(…) Dim s As Char, r As String r = TextBox1.Text : s = CChar(InputBox(Введите символ)) Label2.Text =Результирующая строка: Pr953(r, s) EndSub

Рис. 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, _ ByValsimvol_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.

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

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

SubPr956(ByRef s As String) s = s.Trim ‘циклзамены двух пробелов одним Do Whiles.IndexOf(Space(2)) = 0 s = s.Replace(Space(2), Space(1)) Loop End Sub FunctionReshenie(ByVal s As String) As String Dim Rez As String =Dim i,j, d, k As Integer Dimslovo As String Dimmas() As String =s.Split(CChar(Space(1))) ‘разбиение строку на массив слов Fori = 0 To mas.Length — 1 slovo = mas(i) k = 0’количествоцифр в слове d = slovo.Length’длинаслова Forj = 0 To d — 1’цикл по одному слову If slovo.Substring(j,1) = 0 And _ slovo.Substring(j, 1)

Решение задачи реализует процедура-функция 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 Functionvvod(ByVal T As TextBox) As String Return T.Text EndFunction ‘Процедура вывода результата в TextBox Subvivod(ByVal z As String, ByRef t As TextBox) Ifz.Length0 Then t.Text = z Else t.Text = Все удалено EndIf EndSub ‘Процедура решения задачиудаления символов из строки 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 DoWhile jm ‘перебор всех символов строки a Ifa.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 SubButton1_Click(sender As Object, _ e As EventArgs) HandlesButton1.Click DimStr1, Str2 As String Str1 = vvod(TextBox1) : Str2 = vvod(TextBox2) Обработка(Str2,Str1) vivod(Str1, TextBox3) End Sub Private SubButton2_Click(sender As Object, _ e As EventArgs) HandlesButton2.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.

Статьи к прочтению:

Выворотность тазобедренных суставов. Как разработать выворотность ног, бедер, суставов. Упражнения


Похожие статьи: