Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Строковые функции и операторы



Приведем наиболее часто употребляемые строковые функции:

Функции, возвращающие числовые значения:

ASC(Str$) – выдает числовое значение ASCII-кода первого символа в Str$.

LEN(Str$) – выдает целое число, равное длине строкового выражения Str$.

VAL(Str$) – преобразует строку в числовое выражение, если первый символ аргумента не числовой, то функция возвращает ноль.

INSTR(n, Str$, Str1$) – определяет позицию вхождения выражения Str1$ в Str$, начиная с позиции n.

Функции, аргумент которых числовое выражение):

CHR$(код) – выдает символ ASCII, код которого является аргументом.

STR$(числовое выражение) – преобразует числовое выражение в символьное. Если значение выражения положительно, то к полученной строке слева добавляется пробел.

Пары функций ASC(Str$) и CHR$(код); VAL(Str$) и STR$(числовое выражение) являются обратными по своему назначению.

Функции, и аргумент и значение которых символьные выражения:

MID$(St$, n, m) в качестве результата дает фрагмент строки St$, длиной m, начиная с позиции n.

Оператор MID$(St$, n, m)= Zt$ заменяет фрагмент строки St$ длиной m, начиная с позиции n на строку Zt$.

LEFT$(St$, n) - выделяет из выражения n левых символов.

RIGHT$(St$, n) - выделяет из выражения n правых символов.

LTRIM$(St$) - удаляет левые пробелы.

RTRIM$(St$) - удаляет правые пробелы.

INKEY$ - функция анализирует информацию о нажатых клавишах. Эта функция, помещенная в цикл DO … LOOP, может быть использована для создания паузы произвольной продолжительности, управления графическим объектом, выхода из цикла и т.д.

HEX$(числовое выражение&) – возвращает шестнадцатеричное представление аргумента.

OCT$(числовое выражение&) – возвращает восьмеричное представление аргумента.

LCASE$(Str$) – переводит все буквы строки Str$ в строчные.

UCASE$(Str$) – переводит все буквы строки Str$ в прописные.

SPASE$(n%) – возвращает строку из n% пробелов.

STRING$(n%, {код | строковое выражение}) – возвращает строку из n% повторяющихся символов.

Следует обратить внимание на то, что тексты могут содержать числовую информацию, но в этом случае цифры в тексте воспринимаются как символы.

ПРИМЕР 14.1. Из исходной строки a$ удалить подряд идущие повторяющиеся пробелы (из группы подряд идущих пробелов остается один).

CLS

LINE INPUT a$ ' вводим исходную строку

DIM I, dl AS INTEGER

dl = LEN(a$) 'определяем длину строки

FOR I = 1 TO dl-1

REM Формируем новую строку b$ без лишних пробелов

REM Из строки a$ выделяем очередной символ и следующий за ним

s$ = MID$(a$, i, 1)

ss$ = MID$(a$, i + 1, 1)

IF s$ <> " " AND ss$ <> " " OR s$ <> " " AND ss$ = " " THEN

b$ = b$ + s$

REM В строку b$ записывается последний пробел из подряд идущих пробелов

ELSEIF s$ = " " AND ss$ <> " " THEN

b$ = b$ + s$

END IF

NEXT I

PRINT b$ 'выводим полученную строку

END

Пояснения к программе:

Новую строку b$ формируем следующим образом:

- в исходной строке a$ выделяются два соседних символа;

- если первый из них не пробел, то он присоединяется к новой строке;

- если оба символа пробелы, то в новую строку ничего не добавляется;

- пробел добавляется с случае, когда первый из символов пробел, а второй нет. Таким образом, в новую строку добавляется последний пробел из группы подряд идущих пробелов;

- все условия в блочном операторе можно объединить в одно сложное условие.

ПРИМЕР 14.2. Для строки a$ определить, является ли она симметричной (читается одинаково слева направо и справа налево).

LINE INPUT a$ 'вводим исходную строку

DIM I AS INTEGER

FOR I=LEN(a$) TO 1 STEP -1 'используем отрицательный шаг

b$=b$ + MID$(a$, I, 1) 'заполнение зеркально отраженной строки

NEXT I

IF a$=b$ THEN 'сравнение исходной строки и зеркально отраженной

PRINT "Строка симметричная"

ELSE PRINT "Строка несимметричная"

END IF

END

Пояснения к программе:

- по исходной строке a$ формируем новую строку b$, которая является зеркальным отображением исходной (исходная строка переписанная от конца к началу);

- если строки a$ и b$ совпадают, то исходная строка a$ является симметричной.

Рассмотрим другой способ решения задачи.

LINE INPUT a$ 'вводим исходную строку

DIM I, n AS INTEGER

n=LEN(a$)

FOR I=1 TO n\2

b1$=MID$(a$, I, 1) 'считывание очередного символа строки

b2$=MID$(a$, n-I+1, 1) 'считывание симметричного символа

IF b1$<>b2$ THEN PRINT "Строка несимметричная": END

NEXT I

PRINT "Строка симметричная"

END

Пояснения к программе:

- в этом способе в цикле считываются очередной символ исходной строки и симметричный ему символ из второй половины строки;

- если эти символы не совпадают, исходная строка не является симметричной.

ПРИМЕР 14.3. Сложить два целых положительных числа большой длины.

CLS

INPUT "введите первое число", a$

INPUT "введите второе число", b$

DIM la, lb, I, per, sd, s1, s2 AS INTEGER

la = LEN(a$): lb = LEN(b$)

IF la < lb THEN

DO WHILE la <> lb 'цикл выравнивания строк по длине

a$="0"+a$: la = LEN(a$)

LOOP

END IF

IF la > lb THEN

DO WHILE la <> lb ' цикл выравнивания строк по длине

b$="0" + b$: lb = LEN(b$)

LOOP

END IF

per = 0

FOR I = la TO 1 STEP -1

REM Выделяем по одному символу из строк и преобразуем их в числа

s1 = VAL(MID$(a$, I, 1))

s2 = VAL(MID$(b$, I, 1))

s = s1 + s2 + per 'складываем поразрядно числа и перенос

IF s > 9 THEN

ed = s MOD 10: per = 1 'разделяем сумму на единицы и десятки-перенос

ELSE

ed = s: per = 0

END IF

REM Преобразуем число в строку, убираем пробелы

REM и присоединяем к результату

c$ = LTRIM$(STR$(ed)) + c$

NEXT I

IF per = 1 THEN c$ = STR$(per) + c$ 'присоединяем последний перенос

PRINT a$: PRINT b$: PRINT c$

END

Пояснения к программе:

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

- в данной программе имитируется сложение двух чисел столбиком;

- вводятся два числа в символьной форме;

- строки выравниваются по длине, для этого к началу более короткой строки приписываются нули;

- начиная с конца строк, выделяется по одной цифре из каждой строки, которые преобразуются в числовую форму, и складываются (s1 и s2);

- если их сумма больше 9, то отдельно записываются единицы в ячейку «ed» и перенос - в ячейку «per»; перенос участвует в сложении цифр следующего разряда заданных чисел.

ПРИМЕР 14.4. Дана строка символов, заканчивающаяся точкой. Посчитать, сколько слов содержит данная строка.

CLS

LINE INPUT a$ ' вводим исходную строку

REM Описываем целочисленные переменные, K – счетчик слов

DIM L, I, K AS INTEGER

L = LEN(a$)

K = 0 'устанавливаем начальное значение счетчика слов

FOR I = 1 TO L-1

REM Считываем из исходной строки два соседних символа

s$ = MID$(a$, I, 1)

ss$ = MID$(a$, I + 1, 1)

REM Счетчик увеличивается, если за пробелом следует не пробел

IF s$ <> " " AND ss$ <> " " THEN K = K + 1

NEXT I

PRINT K + 1

END

Пояснения к программе:

- учитываем, что слова отделяются друг от друга пробелами. Подсчитав количество пробелов (групп пробелов), можно определить количество слов в строке. Т.к. в конце строки стоит точка, то количество пробелов будет на единицу меньше, чем число слов;

- в исходной строке a$ выделяются два соседних символа;

- если первый из них пробел, а второй нет, то счетчик слов увеличивается на единицу;

- после обработки строки выводится увеличенное на единицу значение счетчика слов;

- данная программа правильно работает и в случае, когда слова отделяются друг от друга более чем одним пробелом;

- считаем, что перед первым словом исходной строки пробелов нет и между последним словом и завершающей точкой также нет пробелов, иначе программа будет выдавать неверный результат.

Группу строк (символов) можно хранить в строковом массиве, например A$(i), и обращаться к отдельным строкам по именам A$(1),A$(2),A(3) и т.д. Например, список фамилий в телефонном справочнике можно представить, как одномерный строковый массив.

Для массивов строк допустимы те же имена, что и для числовых массивов, только к имени добавляется знак $ или в описании указывается тип. Каждый элемент массива равноценен строковой переменной. Действие всех вышеперечисленных строковых функций распространяется и на элементы массивов.

ПРИМЕР 14.5. С клавиатуры вводится список фамилий. Количество фамилий заранее известно. Распечатать список фамилий в алфавитном порядке.

REM Задача представляет собой задачу сортировки одномерного массива

CLS

DIM n, i, j AS INTEGER

INPUT n 'вводим количество фамилий

DIM fio(n) AS STRING 'описываем символьный массив

REM Вводим с клавиатуры список фамилий

FOR i = 1 TO n

INPUT fio(i)

NEXT

REM Сортировка массива методом «пузырька»

FOR i = 1 TO n - 1

FOR j = 1 TO n - i

REM Если фамилии не по алфавиту, меняем их местами оператором "swap"

IF fio(j) > fio(j + 1) THEN SWAP fio(j), fio(j + 1)

NEXT j

NEXT i

REM Выводим на экран отсортированный список фамилий

FOR i = 1 TO n

PRINT fio(i)

NEXT

END

ПРИМЕР 14.6. Дана строка, состоящая из нескольких слов. Записать слова строки в символьный массив (элемент массива – слово строки). Вывести полученный массив в столбик.

CLS

LINE INPUT a$ ' вводим исходную строку

REM Описываем целочисленные переменные, K – счетчик слов в строке

DIM L, I, K, J, m AS INTEGER

L = LEN(a$)

K = 0 'устанавливаем начальное значение счетчика слов

FOR I = 1 TO L-1

REM Считываем из исходной строки два соседних символа

s$ = MID$(a$, I, 1)

ss$ = MID$(a$, I + 1, 1)

REM Счетчик увеличивается, если за пробелом следует не пробел

IF s$ <> " " AND ss$ <> " " THEN K = K + 1

NEXT I

K = K + 1 'окончательное значение счетчика слов

a$ = a$ + " " 'пробел в конце строки: каждое слово заканчивается пробелом

DIM SL$(1 TO K) 'описываем строковый массив по числу слов в строке

REM Формируем строковый массив

I = 1 'устанавливаем позицию начала поиска первого пробела в строке

FOR J = 1 TO K

m = INSTR(I, a$, " ") 'ищем позицию вхождения в строку очередного пробела

SL$(J) = MID$(a$, I, m-I) 'записываем очередное слово в массив

I = m +1 'устанавливаем позицию начала поиска очередного пробела

PRINT SL$(J) 'выводим сформированный элемент массива на экран

NEXT J

END

Пояснения к программе:

- подсчитываем число слов в исходной строке a$: переменная K;

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

- описываем строковый массив SL$, количество элементов которого равно числу слов в исходной строке a$;

- переменная I – позиция начала поиска очередного пробела в строке одновременно является позицией начала очередного слова в строке, начальное значение переменной I равно 1;

- ищем позицию вхождения очередного пробела в строке – функция INSTR и формируем элемент массива SL$;

- выводим очередной элемент массива SL$ на экран.





Дата публикования: 2015-03-29; Прочитано: 233 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.016 с)...