ВУЗ:
Составители:
Рубрика:
25
many(c,s) – возвращает позицию, следующую за наиболее
длинной подстрокой в s, все символы которой принадлежат сим-
вольному множеству c. Возвращает *s+1, если все символы из s
принадлежат c. Неуспешна, если s[1] не принадлежит c.
many(c,s,i) – все то же, только поиск начинается с позиции i.
many(c,s,i,j) – все то же, только рассматривается подстрока
s[i:j] (состоящая из символов s[1],s[2],…,s[j-1]).
Примеры
s:=”abcd”; write(many(&lcase,s))
Выход: 5
s:=”abcD”; write(many(&lcase,s))
Выход: 4
s:=”Dabcd”; if many(&lcase,s) then write(“O’KEY”)
else write(“NO!!”)
Выход: NO!!
match(s1,s2) – возвращает *s1+1, если s2[1:*s1+1]==s1
match(s1,s2,i) – возвращает *s1+I, если s2[i:*s1+i]==s1
match(s1,s2,i,j) – то же самое, только j ограничивает поиск
справа.
upto(c,s) – возвращает позиции в s от 1 to *s, которые содер-
жат символы из c.
Пример:
s:=”1D2a3b4c5d”
every writes(upto(&digits,s))
Выход 13579
upto(c,s,i) – то же, только поиск в s начинается с позиции i.
upto(c,s,i,j) – поиск в s начинается с позиции i и заканчивает-
ся в позиции j.
В [3] приведен пример
программы, выделяющий из строки
правильные идентификаторы – цепочки символов, состоящие
только из букв латиницы, знаков подчеркивания и цифр (не в пер-
вой позиции):
#generate identifiers in string
26
procedure idents(s)
local i, j, initIdChars, idChars
initIdChars := &letters++’_’
idChars := initIdChars++&digits
i := 1
while j := upto(initIdChars,s,i) &
not any(idChars,s[j-1]) &
k := many(idChars,s,j) do {
suspend s[j:k]
i:=k
}
end
Давайте изменим эту программу так, чтобы она работала и с
кириллицей и выводила информацию в файл:
global allRus
procedure main()
allRus:='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭ
ЮЯабвгдеёжзийклмнопрстуфхцчшщьъыэюя'
s:="Это кириллические идентификаторы с первым непра-
вильным: 17и а_85 б56"
s1:="a111_d t75"
my_file:=open("idents.txt","wt")
every write(my_file,idents(s))
end
procedure idents(s)
local i, j, initIdChars, idChars
initIdChars := &letters++'_'++allRus
idChars := initIdChars++&digits
s ? suspend tab(upto(initIdChars)) &
pos(1) | (move(-1),tab(any(~idChars))) &
tab(many(idChars))
end
Выход:
Это кириллические идентификаторы с первым неправиль-
ным а_85 б56
many(c,s) – возвращает позицию, следующую за наиболее procedure idents(s)
длинной подстрокой в s, все символы которой принадлежат сим- local i, j, initIdChars, idChars
вольному множеству c. Возвращает *s+1, если все символы из s initIdChars := &letters++’_’
принадлежат c. Неуспешна, если s[1] не принадлежит c. idChars := initIdChars++&digits
many(c,s,i) – все то же, только поиск начинается с позиции i. i := 1
many(c,s,i,j) – все то же, только рассматривается подстрока while j := upto(initIdChars,s,i) &
s[i:j] (состоящая из символов s[1],s[2],…,s[j-1]). not any(idChars,s[j-1]) &
Примеры k := many(idChars,s,j) do {
s:=”abcd”; write(many(&lcase,s)) suspend s[j:k]
Выход: 5 i:=k
}
s:=”abcD”; write(many(&lcase,s)) end
Выход: 4
Давайте изменим эту программу так, чтобы она работала и с
s:=”Dabcd”; if many(&lcase,s) then write(“O’KEY”) кириллицей и выводила информацию в файл:
else write(“NO!!”) global allRus
Выход: NO!! procedure main()
allRus:='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭ
match(s1,s2) – возвращает *s1+1, если s2[1:*s1+1]==s1 ЮЯабвгдеёжзийклмнопрстуфхцчшщьъыэюя'
match(s1,s2,i) – возвращает *s1+I, если s2[i:*s1+i]==s1 s:="Это кириллические идентификаторы с первым непра-
match(s1,s2,i,j) – то же самое, только j ограничивает поиск вильным: 17и а_85 б56"
справа. s1:="a111_d t75"
upto(c,s) – возвращает позиции в s от 1 to *s, которые содер- my_file:=open("idents.txt","wt")
жат символы из c. every write(my_file,idents(s))
Пример: end
s:=”1D2a3b4c5d” procedure idents(s)
every writes(upto(&digits,s)) local i, j, initIdChars, idChars
Выход 13579 initIdChars := &letters++'_'++allRus
idChars := initIdChars++&digits
upto(c,s,i) – то же, только поиск в s начинается с позиции i. s ? suspend tab(upto(initIdChars)) &
upto(c,s,i,j) – поиск в s начинается с позиции i и заканчивает- pos(1) | (move(-1),tab(any(~idChars))) &
ся в позиции j. tab(many(idChars))
В [3] приведен пример программы, выделяющий из строки end
правильные идентификаторы – цепочки символов, состоящие Выход:
только из букв латиницы, знаков подчеркивания и цифр (не в пер- Это кириллические идентификаторы с первым неправиль-
вой позиции): ным а_85 б56
#generate identifiers in string
25 26
Страницы
- « первая
- ‹ предыдущая
- …
- 11
- 12
- 13
- 14
- 15
- …
- следующая ›
- последняя »
