Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
02.05.2014
Размер:
751.22 Кб
Скачать
n=Instr(“Visual Basic”, “ “)

Строки

Строки – это переменные типа String. Перечислим основные функции, предназначенные для работы со строками.

1.Instr([start,]str1,str2[,compare]) – возвращает позицию первого вхождения подстроки str2 в строке str1, начиная с левого конца строки с позиции start. Если аргумент start не указан, поиск начинается с первой позиции и до конца строки. Compare – метод, выбираемый для сравнения строк. Он может принимать следующие значения: vbBinaryCompare = 0 – выполняет двоичное сравнение выражений (в

этом случае прописные и строчные символы отличаются), vbTextCompare = 1 – выполняет посимвольное сравнение выражений. Если задан аргумент compare, то аргумент start должен быть указан обязательно. Например, в следующей строке

переменная n примет значение 7, так как именно в седьмой позиции с начала строки находится пробел.

2.InstrRev(str1,str2[,start[,compare]]) – возвращает позицию первого вхождения подстроки str2 в строке str1, начиная с правого конца строки с позиции start. Если этот аргумент не указан, поиск начинается с последней позиции и до начала строки. Например, в следующей строке n=InstrRev(“Visual Basic”, “ “) переменная n примет значение 6, так как в шестой позиции с конца строки находится пробел.

3.Join(list[,delimiter]) возвращает строку, созданную объединением строк, содержащихся в указанном одномерном массиве символов list. Delimiter – символ, разделитель строк в возвращаемой строке. По

умолчанию – пробел. Например,

Dim ss(1) As String

ss(0) = "Visual" : ss(1) = "Basic"

Text1 = Join(ss) 'будет Visual Basic ss(0) = "Maк" : ss(1) = "Дональд"

Text2 = Join(ss, “”) 'будет MaкДональд

4.Split(str1, delimiter) возвращает массив строк, сформированный из строки str1, элементы которой отделяются друг от друга разделителем

delimiter.

v= Split(“Visual Basic”, “ “)

‘будет v(0) = "Visual" и v(1) = "Basic"

5.Left(str1, length) возвращает заданное число символов с левого конца строки str1. Length – количество возвращаемых символов. Если length = 0, то возвращается пустая строка. Если length больше, чем длина

строки str1, то возвращается вся строка str1.

v= Left(“Visual Basic”, 6)

'будет v = "Visual"

6. Len(str1|varname) возвращает размер строки в символах или размер переменной в байтах.

m= Len(“Visual Basic”)

'будет m = 12

7.Ltrim(str1), Rtrim(str1), Trim(str1) удаляют пробелы в строке слева, справа или с обеих сторон.

8.Mid(str1,start[,length]) возвращает указанную часть строки, начиная с

позиции start.

v= Mid(“Visual Basic”, 6, 5) 'будет v = "l Bas"

9.Replace(str1, find, repl [, start[, count[, compare]]]) возвращает строку,

вкоторой одна последовательность символов find заменяется другой repl в строке str1 определенное (count) число раз. Если аргумент count не указан, то по умолчанию он принимается равным –1, что требует

замены всех возможных вхождений.

v= Replace(“Visual Basic”, “a”, “y”) 'будет v= "Visuyl Bysic"

10.Right(str1,length) возвращает число символов с правого конца строки.

v= Right(“Visual Basic”, 5) 'будет v = "Basic"

11.Space(number) возвращает указанное число пробелов.

12.StrComp(str1,str2[,compare]) – возвращает результат сравнения двух указанных строк. Если результат будет равен –1, то str1<str2, если равен 0, то str1=str2, если равен 1, то str1>str2.

13.String(number,character) – возвращает строку, в которой символы character повторяются number раз. Если аргумент character имеет числовое значение, то он интерпретируется как код символа. Также этот аргумент может быть символом или строкой символов.

14.Asc(string) – возвращает код первого символа строки.

15.Chr(ANSIcode) – возвращает символ, соответствующий указанному числовому коду. Символы в диапазоне от 0 до 31 не отображаются и предназначены для управления работой: например, chr(13)=vbCr

перевод каретки, chr(9)=vbTab – табуляция, chr(13)+chr(10)=vbCrLf

перевод каретки и возврат строки.

16.LenB(str1) – возвращает размер строки в байтах. Например,

Print LenB(″ABCD″) ′для строки ″ABCD″ в ОЗУ будет выделено 8 байт Print Len(″ABCD″)′а здесь в ОЗУ будет выделено лишь 4 байта

Пример 23. Дана строка, содержащая следующие элементы: индекс, название города, адрес, фамилия, имя и отчество, которые отделены друг от друга запятыми. Создать из строки массив слов. Выделить из строки индекс, название города, отчество, а также заменить все запятые на символы «#» и определить, какая информация записана между 20-й и 35-й позициями в исходной строке.

DefStr S-T

Private Sub Command1_Click()

Dim G As Double

Dim D1 As Integer, D2 As Integer

S = "450098, г.Уфа, ул. Ленина, д.170/1, кв.20, Зуев Павел Львович"

m = Split(S, ",")

'Формируем массив слов, разделенных запятыми

For i% = 0 To UBound(m)

 

s2 = s2 & m(i) & vbCrLf

 

Next

 

 

Text1 = s2

 

 

D1 = InStr(S, ",")

'Позиция первой запятой=7

t = Left(S, D1 - 1)

 

'Значение t = "450098"

Text2 = t & " (до позиции " & D1 - 1 & ")"

D2 = InStr(8, S, ",")

'Найти следующую запятую, начиная с позиции 8

t = Mid(S, D1 + 1, D2 - D1)

'Значение t = " г.Уфа"

Text3 = t & " (c " & D1 + 1 & " до " & D2 - 1 & " позиции)"

D = InStrRev(S, " ")

 

'Позиция последнего пробела=54

s2 = Right(S, Len(S) - D)

'Выделить последнее слово="Львович"

Text4 = s2 & " (с позиции " & D + 1 & ")" S4 = Mid(S, 20, 15)

Text5 = S4

s5 = Replace(S, ",", "#") Text6 = s5

End Sub

Рис. 30

Пример 24. Дана строка. Подсчитать количество слов, разделенных множеством разделителей: пробелами, запятыми, точками и точками с запятой.

Option Base 1

Dim slovo(50) As String, s As String

'Предполагаем, что в строке может быть не более 50 слов

Private Sub Command1_Click()

s = LTrim(s)

'Убрать из строки ведущие пробелы

k% = Len(s)

'Определить длину строки

n% = 1

'Задать счетчик слов, равный 1

slovo(n) = ""

'Подготовить слово для заполнения символами

For i% = 1 To k

 

s1$ = Mid(s, i, 1)

'Выделим i-й символ из строки

If s1 = " " Or s1 = "," Or s1 = "." Or s1 = ";" Then

'Если это следующие разделители ",. ;", то выполнить

s1 = Mid(s, i + 1, 1)

', выделить второй символ и проверить его.

' Если он не является символом-разделителем,

' то счетчик слов увеличивается, и переходим к следующему слову. If Not (s1 = " " Or s1 = "," Or s1 = "." Or s1 = ";") And (i <> k) Then

'Здесь And (i <> k) означает анализ без последнего символа

n = n + 1

 

 

slovo(n) = ""

 

End If

' Если же второй и последующие символы являются

' разделителями, то ничего не предпринимать в верхней конструкции IF

Else

'Если же первый считанный символ не является символом-

 

 

'разделителем, то заполняем им слово

slovo(n) = slovo(n) & s1

End If

 

 

Next i

 

 

s = ""

 

 

For i = 1 To n

'Формируем строку из слов

s = s & slovo(i) & vbCrLf Next

Text2 = s & "Количество слов = " & n

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Form_Load()

'Для всех объектов на форме в режиме конструирования определить 'свойства Font=MS Sans Serif, 8, жирный, для кнопок

'Command1.Caption=”Определить”, Command2.Caption=”Выход”, 'для полей Text1.Multiline=True, Text2.Multiline=True, Text2.ScrollBars=2

s = Chr(34) & "Светильник тела есть око; итак, если око твое будет "

s = s & " чисто, то и все тело твое будет светло; а если оно будет худо, " s = s & "то и тело твое будет темно" & Chr(34) & ". (Евангелие от Луки)"

Text1 = s :

Text2 = ""

End Sub

 

Рис. 31

Пример 25. Дана строка. Определить, какое количество букв русского алфавита находится в строке.

Dim s As String, ch As String * 1

'Символ, выделяемый из строки

Dim a(192 To 255) As Byte

 

'От 192 до 255 коды русских букв

'a – массив счетчиков букв. Он обнуляется автоматически

Private Sub Command1_Click()

 

k% = Len(s)

 

 

For i = 1 To k

 

 

ch = Mid(s, i, 1)

'Выделяем символ из строки и проверяем

If ch >= Chr(192) And ch <= Chr(255) Then 'соответствие его диапазону

a(Asc(ch)) = a(Asc(ch)) + 1

 

'Если попал, то подсчитываем

End If

 

 

Next

 

 

s = ""

'Принудительно очищаем строку

For i = 192 To 255

'Цикл формирования букв и их количество

If a(i) <> 0 Then

s = s & Chr(i) & Space(7) & "Кол-во= " & a(i) & vbTab & "10-й код=" & i & _

End If

vbTab & "16-й код= " & Hex(i) & vbCrLf

 

Next

 

Text2 = s

'Вывод

End Sub

Private Sub Command2_Click()

End

End Sub

Private Sub Form_Load()

s = "Целью книги является привитие навыков программирования " s = s & "на основе готовых примеров."

Text1 = s : Text2 = "" : Caption = "Подсчет количества букв" Command1.Caption = "Подсчитать"

Command2.Caption = "Выход"

End Sub

Рис. 32

Попутно в программе выводятся десятичный и шестнадцатеричный (функцией Hex) коды символов. Основываясь на рассмотренном примере,

Соседние файлы в папке Лекции по информатике [Лебедев]