Работа со строками
Строку можно определить и как последовательность символов произвольной длины, и как массив символов, так как к каждому символу строки допустимо обращение по его индексу.
Отношение порядка на множестве строк может быть определено следующим образом. Пусть даны две строки X и Y длины т.
Символ V читается как «для любого», символ 3 - «существует».
Следовательно, сравнение строк сводится к поиску их несовпадающих частей. Если неравных частей не существует, можно говорить о равенстве строк.
Алгоритм сравнении строк
Пусть заданы две строки X и Y. Необходимо определить, равны ли эти строки между собой.
- 1. i= 1.
- 2. Пока (Xi = Yi) и (i < ш) выполнять i = i + 1.
- 3. Если i > ш, то X = Y.
- 4. Иначе, если Xi < Yi, то X
- 5. Иначе X>Y.
где т - максимальная из длин строк X и Y.
Поиск строки в массиве строк
Пусть задан упорядоченный массив Т из п строк. Необходимо найти элемент массива, равный заданной строке X. Так как массив упорядочен, для поиска в массиве используем алгоритм оптимального бинарного поиска, а для сравнения строк - приведенный выше алгоритм.
- 1. L = 1. Левая граница массива.
- 2. R = п. Правая граница массива.
- 3. Если R < L, то перейти на шаг 9.
- 4. s = |_(L + R)/2_|.
- 5. i = 1.
- 6. Пока (Т8д = Xi) и (i < m) выполнять i = i + 1.
- 7. Если (Ts,i < Х;) и (i < m), to L = s + 1. Перейти на шаг 3.
- 8. Иначе (Ts>i> ХО R = s. Перейти на шаг 3.
- 9. i= 1.
Ю.Пока (TR,i= Xi) и (i < m) выполнять i = i + 1.
11.Если i>m, то поиск удачен, в противном случае - строки нет в массиве, где m - максимальная из длин сравниваемых строк.
Поиск подстроки в строке
Пусть задана строка 5 из п элементов и строка Р из m элементов, причем О <т<п. Необходимо обнаружить первое вхождение подстроки Р в строку S.
- 1. i = -1.
- 2. i = i + 1. { указатель индекса, с которого осуществляется поиск }
- 3. j = 1. { счетчик по подстроке Р }
- 4. Пока (j < m) и (Si+j = Pj) выполнять j = j + 1.
- 5. Если (j < m) и (i < n - m) - перейти на шаг 2.
- 6. Если j > m, поиск удачен. Подстрока Р входит в строку S с позиции i + 1.
Иначе - поиск неудачен.