Лекция 9 Строки_Файлы
.pdfКафедра
информатики
Лекция 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