ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »