Глава 8
Строки символов
Краткое содержание: сечения, использование ТО
примечание: эти операции отсутсвуют в стандартном бейсике.
Пусть имеется строка символов, тогда ее подстрокой будет неко-
тора* последовательность символов иэ этой строки. Так ''STRING''
является подстрокой от "BIG- GER STRING" , а "В STRING" и
"BIG STRING" не являются.
Существует действие, называемое сечением для определения
подстрок и которое может применяться к строковым выражениям. Об-
щая его форма:
'строковое выражение ' ('начало' то 'конец'')
следующее .выражение истинно:
"ABCDEF" (2 ТО 5) « "BCDE"
Если опущено 'начало', то по умолчанию подразумевается I, если -
'конец', то подразумевается длина всей строки. Так:
"ABCDEF" (ТО 5) • "ABCDEF" (l ТО 5) « "ABCDB"
"ABCDEF" (2 ТО) ■ "ABCDEF" (2 ТО 6) «"BCDEF"
"ABCDEF" (ТО) • "ABCDEF" (1 ТО б) ■ "ABCDEF"
Последнее выражение можно было бы записать и так:
"ABCDEF" (),
что тоже верно, можно опускать и слово то:
"ABCDEF" (3) » "ABCDEF (3 ТО 3) - "С"
'Начало' и 'конец' должны находиться в пределах строки, и ина-
че будет выдано сообщение об ошибке. Так, выражение
''ABCDEF'' (5 ТО 7)
Вызывает сообщение '3 SUBSCRIPT WRONG', так как 'конец' превышает
длину строки (6). Если 'начало' больше, чем 'конец', либо обе
границы лежат за пределами строки, то результатом будет пустая
строка:
''ABCDEF'' (8 ТО 7) » " "
''ABCDEF'' (I ТО 0) » " "
'Начало' и 'конец' не могут быть отрицательными, иначе выда-
ется сообщение 'в INTEGER OUT OF RANGE'.
Следующая программа иллюстрирует эти правила:
10 LET А* • "ABCDEF"
20 FOR N»1 ТО 6
30 PRINT AS (N TO 6)
40 NEXT N
5 0 STOP
Можно также присваивать значения подстроке, попробуйте:
10 LET AS » " I AM TNE ZX SPECTRUM"
20 PRINT A*
30 LET A* (5 TO 8) »
40 PRINT AS
Подстрока A* (5 то 8) имеет д^ину только в 4 символа, поэтому
будут использованы только первые четыре звездочки, это особен-
ность присвоения значения подстроке: длинные данные усекаются
справа, а короткие дополняются пробеламй до длины подстроки, это
действие называют прокрустианом. Если теперь вы выполните:
LET А» () * "NELLO THERE"
и
PRINT А»; " . "
Вы увидите, что будут выведены дополнительные пробелы, так как
'AS () ' считается подстрокой, для правильного выполнения следует
писать:
LET AB • "HELLO THERE"
Можно использовать скобки, что позволяет вычислять значение
строкового выражения перед тем, как брать сечение, например:
"ABC" + "DEF" (1 ТО 2) * "ABCDE"
("ABC" + "DEF") (1 ТО 2) » "АВ"