Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция 9 Строки_Файлы

.pdf
Скачиваний:
9
Добавлен:
18.03.2015
Размер:
325.84 Кб
Скачать

Кафедра

информатики

Лекция 9

УГАТУ

Кафедра

Строки

УГАТУ

 

 

информатики

 

 

Строка – последовательность символов. В состав строки СТРОКИ могут входить буквы латинского алфавита, кириллица,

цифры, всевозможные знаки, скобки, пробел и др.

ФАЙЛЫ

Каждый символ строки занимает 1 байт памяти (двоичный

код, зафиксированный в кодовой таблице ASCII).

 

Количество символов в строке называется ее длиной.

 

Длина строки может динамически изменяться.

 

Пустая строка имеет нулевую длину.

 

 

 

2

1

Кафедра

Строки

информатики

 

УГАТУ

Строковая константа – последовательность символов, заключенных в апострофы.

Например:

"Это строковая константа", "123 ".

При использованиив выражениях строковая константа обязательно заключается в апострофы.

Два следующих друг за другом апострофа (""), обозначают пустую строку, т.е. строку с нулевой длиной.

3

Кафедра

Строки

УГАТУ

информатики

 

 

 

 

 

 

Формат описания :

Dim/Public <Имя_строки> as String (*<Длина строки>)

Если длина строки не указана в описании явно, ее максимальная длина может быть до 2 Мб.

Если строке присваиваетсязначение более длинное, чем <Длина строки>, то лишние символы отбрасываются

Dim s1 As String, s2 As String * 5

Dim s3 As String * 7, s4 As String * 10

S2

= "Группа"

‘ s2= "Групп"

S3

= "АП-132"

‘ s3= "АП-132"

S1

= "лучшая в университете"

s1= "лучшая в университете"

s4 = "лучшая в университете"

‘ s4= "лучшая в у"

4

2

информатики

Операции над строками

Кафедра

 

УГАТУ

Выражения, в которых операндами служат строковые данные, называются строковыми.

1)операция сцепления & (+)

2)операции отношения =, <, >, <=, >=, <>

Операции отношения имеют более низкий приоритет, чем операции сцепления.

5

информатики

Операции над строками

Кафедра

 

УГАТУ

Операция сцепления (конкатенации) «&» применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и строковые переменные.

Dim s1 As String, s2 As String * 5

Dim s3 As String * 7, s4 As String * 10

S2 = "Группа" : S3 = "АП-132"

S1 = s2 + s3

‘ s1=

"ГруппАП-132"

S4 = s2 + s3

‘ s4=

"ГруппАП-13"

6

3

информатики

Операции над строками

Кафедра

 

УГАТУ

Операции отношения позволяют выполнить сравнение двух строк, в результате чего получается логическое значение (True или False).

Сравнение строк производится в лексикографическом порядке:

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

Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная ("Иванова" > "Иванов").

Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.

7

информатики

Операции над строками

УГАТУ

Кафедра

 

 

 

 

 

 

 

 

 

Сравнение строк

 

Пример. Заданы строки символов

"ABCD", "Abcd", "abcd", "ABC", "ABc"

После сортировки по возрастанию онирасположатся в следующем порядке:

"abcd", "Abcd ", "ABc " "ABCD ", "ABC ",

8

4

Кафедра

Функции работы со строками

информатики

 

 

 

 

 

 

 

 

УГАТУ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Функция

 

Назначение

 

 

 

(S- строка,X- число)

 

 

 

 

 

 

 

 

 

 

Возвращает количествосимволовв строке S

 

 

Len(S)

Fio=”Иванов”:

l=Len(Fio)

 

 

 

Результат: l=6

 

 

 

 

 

 

 

 

 

Возвращает k символовс начала строки

 

 

 

Left(S,k)

Fio=”Иванов”:

t=Left(Fio,4)

 

 

 

 

Результат: t=”Иван”

 

 

 

 

Возвращает k символовс конца строки

 

 

Right(S,k)

Fio=”Иванов”:

T=Right(Fio,2)

 

 

 

Результат: T=”ов”

 

 

 

 

 

Возвращает k символовиз переменнойS, начинаяс позиции

 

 

 

Pos, включительно

T=Mid(Fio,2,4)

 

 

Mid(S,Pos,k)

Fio=”Иванов”:

 

 

Результат: T=”вано”

 

 

 

Эта функциячасто используетсядля выделения одного символа из строки: Mid(S,i,1)

9

информатики

Функции работы со строками

УГАТУ

Кафедра

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Val(S)

Преобразует строку S в десятичное число

 

 

 

 

p=”-243.65”: S=Val(p)+100

 

 

 

 

 

Результат: S=-143.65

 

 

 

 

CInt(S)

Преобразует строку S в целое число

 

 

 

 

p=”-243”: S=Val(p)+100

 

 

 

 

 

Результат: S=-143

 

 

 

 

 

Преобразует число X в строкусимволов с учетом знака.Если

 

 

 

 

Str(X)

числоположительное,вместознака ставится пробел.

 

 

 

 

a=123.45: b=-678: S=Str(b)+Str(a)

 

 

 

 

 

Результат: S=”-678 123.45”

 

 

 

 

 

 

 

 

 

 

СStr(X)

Преобразует числовое выражениеX в строку символов.

 

 

 

 

S=СStr(4-7/3)

 

 

 

 

 

Результат: S=”4-7/3”

 

 

 

 

 

Возвращает символ, соответствующий числовомукоду в таблице

 

 

Chr(N)

символов

 

 

 

 

For i=65 to 90 Print Chr(i)

 

 

Результат: Вывод заглавных букв латинскогоалфавита

10

5

 

 

информатики

Функции работы со строками

УГАТУ

 

 

 

Кафедра

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Определяетчисловой кодпервого символа в строке S:

 

 

 

 

 

 

Asc(S)

Print Asc(”123”):

 

 

 

 

 

 

Print Asc(” 1a2m”)

 

 

 

 

 

 

 

 

Print Asc(”ABC”)

 

 

 

 

 

 

 

 

Результат: 4932 65

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Начинаяс позиции n, определяетпозициюпервого появления

 

 

 

 

 

 

 

 

подстроки S1 в строке S. Если такой подстроки нет, то возвращаемым

 

 

 

 

 

 

InStr(n,S,S1)

значениемфункции будет ноль.

 

 

 

 

 

 

S=”кукуруза”: S1=”ку”

 

 

 

 

 

 

 

 

Print Instr(1,S,S1);

 

 

 

 

 

 

 

 

Print Instr(2,S,S1);

 

 

 

 

 

 

 

 

Результат: 1 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

InStrRev(n,S,S1)

Определяетпозицию первого появленияподстроки S1 в строке S

 

 

 

 

 

 

справа налево(начинаяс концастроки)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LTrim(S)

Удаляет пробелы,расположенныевначале строки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

 

 

 

 

 

 

 

 

 

 

 

КафедраФункции и процедуры работы со строками

информатики

УГАТУ

RTrim(S)

Удаляет пробелы,расположенныевконце строки

TRim(S)

Удаляет пробелы,расположенныевначале и в концестроки

LCase(S)

Изменяет регистр букв исходной строки S на нижний

UCase(x)

Изменяет регистр букв исходной строки S на верхний

 

Изменяет регистр букв строки S, в зависимости от значения

StrConv(S,p)

параметра p

p =1, верхний регистр;

 

p =2, нижнийрегистр;

 

p =3, толькоперваязаглавная

StrReverce(x)

Spaсe(n)

Replace (S,S1,S2,n,k)

Изменяет порядок следованияв строке на обратный

Возвращает строку, состоящуюиз n пробелов

Заменяет в строке S подстроку S1 на подстроку S2, начинаяс позиции n.

k - количествозамен, если значение k не указано,то заменяются все вхождения S1 в S.

Эта функцияиспользуется такжедля удаления подстрок:

s1=”121113”

Удаляется

Print Replace(s1,”1”,””)

Результат: 23

подстрока ”1”

 

12

6

КафедраТиповые задачи обработки строк

информатики

УГАТУ

Пример. Определить количество цифр в строке

S =1 Декабря 2009 года

s$ = "1 Декабря 2009 года" k% = 0

n = Len(s) For i% = 1 To n

s1$ = Mid(s, i, 1)

If s1 >= "0" And s1 <= "9" Then k = k + 1

Next

Print k

k n i “0"<=S1<="9"

0 19

1 + 1

2-

3-

 

 

11

+

2

 

 

14

+

5

15

-

 

 

 

13

Кафедра Типовые задачи обработки строк

информатики

УГАТУ

Dim t As Boolean

 

 

 

 

S$ = “ромашка"

 

 

 

 

t = False

 

 

 

 

n% = Len(S)

i

a1

a2

a3

For i = 1 To n - 1

 

 

 

 

1

р

1

0

a1$ = Mid(S, i, 1)

a2% = InStr(i, S, a1)

2

о

2

0

a3% = InStr(i + 1, S, a1)

 

 

 

 

If (a3 <> 0) And (a2 <> a3) Then

3

м

3

0

t = True

 

 

 

 

Exit For

4

а

4

7

End If

 

 

 

 

Next

If t Then

Text1.Text = «Есть"

Else

Text1.Text = «Нет"

End If

14

7

КафедраТиповые задачи обработки строк

информатики

УГАТУ

можно и по-другому: сравнивать символы строки подобно элементам массива:

S$ = "ромашка" t = False

n% = Len(S) For i% = 1 To n a1$ = Mid(S, i, 1)

For j% = i + 1 To n a2$ = Mid(S, j, 1)

If (a1

= a2) Then

 

 

 

 

 

 

t = True

 

 

 

 

 

 

Exit For

 

 

 

 

 

 

End If

1

2

3

4

5

6

7

Next j

 

 

 

 

 

 

 

Next i

р о м а ш к а

 

i j

a1 = a2

12 ‘p’ = ‘o’ false

-

7 ‘p’ = ‘а’ false

23 ‘o’ = ‘м’ false

..

7 ‘o’ = ‘а’ false

34 ‘м’ = ‘а’ false

7 ‘м’ = ‘а’ false

45 ‘а’ = ‘ш’ false

..

7 ‘а’ = ‘а’ True

15

КафедраТиповые задачи обработки строк

информатики

УГАТУ

Пример. Подсчитать в заданной строке количество гласных букв латинского алфавита

k%=0

n% = Len(S) For i% = 1 To n a$ = Mid(S, i, 1)

Select Case a

Case "A", "E", "I", "O", "U", "Y"

k=k+1

Case "a", "e", "i", "o", "u", "y"

k=k+1

End Select

If (a = "A") or (a = "E") or (a = "I") or (a = "O") or (a = "U") or (a = "Y")

or (a = "a") or (a = "e") or (a= "i")

or (a= "o") or (a= "u") or (a= "y") then k=k+1

Next i

16

8

КафедраТиповые задачи обработки строк

информатики

УГАТУ

Пример. Подсчитать количество слов в заданной строке. Решение – подсчитать количество пробелов.

Private Sub Form_Load()

 

Text1 = ""

 

 

Text2 = ""

Private Sub Command1_Click()

End Sub

s = Split(Text1, " ")

' Слова разделяются пробелами

 

s1$ = ""

 

 

' n - верхняя граница массива, n- Количество слов

n% = UBound(s)

 

 

For i% = 0 To n - 1

 

 

s1 = s1 & s(i) & vbCrLf

 

 

Next

 

 

Text2 = s1 & n

 

 

End Sub

 

 

Private Sub Command2_Click()

 

 

 

 

End

 

 

End Sub

 

 

 

 

 

17

Кафедра

информатики

УГАТУ

Обратить внимание на то, что возможен пробел и в начале строки

18

9

информатики

Обработка строк

УГАТУ

информатики Изменение строк (замена символов)

УГАТУ

Кафедра

 

 

 

 

 

Кафедра

 

Заданный массив строк отсортировать по возрастанию

Пример. Из строки S получить новую строку S1,

 

 

 

 

 

 

 

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

 

S(0)

S(1)

S(2)

S(3)

S(4)

S(5)

For I% = 1 To n

 

"8a"

"10б"

"10а"

"9б"

"11а"

"9а"

s1 = Mid(s, I, 1)

 

If (s1 >= "а") And (s1 <= "у") Then

 

 

 

 

 

 

 

s3 = Trim(Chr(Asc(s1) - 32))

 

"8a"

"9а"

"9б"

"10а"

"10б"

"11а"

s2 = Trim(s2) & Trim(s3)

 

Else

 

 

 

 

 

 

 

s2 = Trim(s2) & Trim(s1)

 

"10а"

"10б" "11а" "8a"

"9а"

"9б"

End If

 

Next

 

Сортировка строк проводится в лексикографическом

Код прописной русской буквы в таблице ASCII на 32

 

порядке в соответствиис кодовой таблицей!!!

 

меньше кода соответствующей ей строчной

 

 

 

 

 

 

19

 

20

10