Символьные строки

Что такое символьная строка?

r

Символьная строка – это последовательность символов, расположенных в памяти рядом (всоседних ячейках). Для работы с символами во многих языках программирования есть переменные специального типа: символы, символьные массивы и символьные строки (которые, в отличиеот массивов, рассматриваются как цельные объекты). Основной тип данных для работы с символьными величинами в языке Python – это символьные строки (тип string).

s = input( "Введите имя: " )

r

Для ввода строки с клавиатуры применяют функцию input:

n = len(s)

r

Длина строки определяется с помощью функции len (от англ. length – длина). В этом примере в переменную n записывается длина строки s

print ( s[5] )

r

Для того, чтобы выделить отдельный символ строки, к нему нужно обращаться так же, как кэлементам массива (списка): в квадратных скобках записывают номер символа. Например, такможно вывести на экран символ строки s с индексом 5 (длина строки в этом случае должна бытьне менее 6 символов)

s = input( "Введите строку:" )
s1 = ""
for c in s:
if c == "а": c = "б"
s1 = s1 + c
print ( s1 )

r

Тем не менее, можно составить из символов существующей строки новую строку, и при этомвнести нужные изменения. Приведём полную программу, которая вводит строку с клавиатуры,заменяет в ней все буквы "a" на буквы "б" и выводит полученную строку на экран. Здесь в цикле for c in s перебираются все символы, входящие в строку s. Каждый их них наочередном шаге записывается в переменную c. Затем мы проверяем значение этой переменной:если оно совпадает с буквой «а», то заменяем его на букву «б», и прицепляем в конец новой строки s1 с помощью оператора сложения. Нужно отметить, что показанный здесь способ (многократное «сложение» строк) работаеточень медленно. В практических задачах, где требуется замена символов, лучше использоватьстандартную функцию replace, о которой пойдет речь дальше.

Пример обработки строк

print ( "Введите имя, отчество и фамилию:" )
s = input()
n = s.find ( " " )
name = s[:n]
s = s[n+1:]
n = s.find ( " " )
name2 = s[:n]
s = s[n+1:]
s = s + " " + name[0] + "." + name2[0] + "."
print ( s )

r

Мы последовательно выделяем из строки три элемента: имя, отчество и фамилию, используя тот факт, что они разделены одиночными пробелами. После того, как имя сохранено в отдельной пе-ременной, в строке s остались только отчество и фамилия. После «изъятия» отчества остается только фамилия. Теперь нужно собрать строку-результат из частей: «сцепить» фамилию и первые буквы имени и отчества, поставив пробелы и точки между ними. Для выполнения всех операций будем срезы и метод find

print ( "Введите имя, отчество и фамилию:" )
s = input()
fio = s.split()
s = fio[2] + " " + fio[0][0] + "." + fio[1][0] + "."
print ( s )

r

Используя встроенные функции языка Python, эту задачу можно решить намного проще. Прежде всего, нужно разбить введённую строку на отдельные слова, которые разделены проблемами. Для этого используется метод split (от англ. split – расщепить) который возвращает спи-сок слов, полученных при разбиении строки. Вот полная программа

Преобразования число-строка

r

В практических задачах часто нужно преобразовать число, записанное в виде цепочки сим-волов, в числовое значение, и наоборот. Для этого в языке Python есть стандартные функции: int – переводит строку в целое число; float – переводит строку в вещественное число; str – переводит целое или вещественное число в строку.

s = "123"
N = int ( s )
s = "123.456"
X = float ( s )

N = 123
s = str ( N ) # s = "123"
X = 123.456
s = str ( X ) # s = "123.456"

X = 123.456
s = "{:7.2f}".format(X) # s = "◦123.46"
s = "{:10.2e}".format(X) # s = "◦◦1.23e+02"

Рекурсивный перебор

def TumbaWords ( A, w, L ):
if len(w) == L:
print ( w )
return
for c in A:
TumbaWords ( A, w + c, L )

r

Процедура для перебора слов может быть записана так:параметре A передаётся алфавит языка, параметр w – это уже построенная часть слова, а L – нужная длина слова. Когда длина построенного слова станет равна L, то есть будет получено слово требуемой длины, слово выводится на экран и происходит выход из процедуры (окончание рекурсии). Если слово не достроено, в цикле перебираем все символы, входящие в алфавит, по очереди добавляем каждый из них в конец строки и вызываем процедуру рекурсивно.

Строки в процедурах и функциях

r

Строки можно передавать в процедуры и функции как параметры, а также возвращать как результат функций. Построим процедуру, которая заменяет в строке s все вхождения слова-образца wOld на слово-замену wNew (здесь wOld и wNew – это имена переменных, а выражение «слово wOld» означает «слово, записанное в переменную wOld»).

def replaceAll ( s, wOld, wNew ):
lenOld = len(wOld)
res = "" while len(s) > 0:
p = s.find ( wOld )
if p < 0:
return res + s
if p > 0:
res = res + s[:p]
res = res + wNew
if p+lenOld >= len(s):
s = "" else: s = s[p+lenOld:]
return res

r

Функция на языке Python. Её параметры – это исходная строка s, строка-образец wOld и строка-замена wNew

s = "12.12.12"
s = s.replace( "12", "A12B" )
print ( s )

r

Так как операция замены одной подстроки на другую используется очень часто, в языке Python есть встроенная функция, которая выполняет эту операцию. Она оформлена как метод для переменных типа «строка» (str) и вызывается с помощью точечной записи

Сравнение и сортировка строк

r

Строки, как и числа, можно сравнивать. Для строк, состоящих из одних букв (русских или ла-тинских), результат сравнения очевиден: меньше будет та строка, которая идет раньше в алфавит-ном порядке. Например, слово «паровоз» будет «меньше», чем слово «пароход»: они отличаются в пятой букве и «в» < «х». Более короткое слово, которое совпадает с началом более длинного, тоже будет стоять раньше в алфавитном списке, поэтому «пар» < «парк».

aS = []
print ( "Введите строки для сортировки:" )
while True:
s1 = input()
if s1 == "": break
aS.append ( s1 )
aS.sort()
print ( aS )

r

Для решения этой задачи с помощью языка Python удобно записать строки в массив (список) и затем отсортировать с помощью метода sort:Строки заносятся в список aS. Сначала этот список пустой, затем в цикле мы вводим очередную строку с клавиатуры и записываем её в переменную s1. Ввод заканчивается, когда введена пустая строка, то есть вместо ввода строки пользователь нажал клавишу Enter. В этом случае сработает условный оператор и выполнится оператор break, прерывающий цикл.

Операция со строками

s1 = "Привет"
s2 = "Вася"
s = s1 + ", " + s2 + "!"

r

Как мы уже видели, оператор '+' используется для объединения (сцепления) строк, этаоперация иногда называется конкатенация. В результате выполнения приведённой программы в строку s будет записано значение "Привет, Вася!".

s = "0123456789"
s1 = s[:3] + s[9:]

r

Для того, чтобы выделить часть строки (подстроку), в языке Python применяется операцияполучения среза (англ. slicing), например s[3:8] означает символы строки s с 3-го по 7-й (то естьдо 8-го, не включая его). Следующий фрагмент копирует в строку s1 символы строки s с 3-го по 7-й (всего 5 символов). В строку s1 будет записано значение "34567".

s = "0123456789"
s1 = s[:3] + "ABC" + s[3:]

r

Для удаления части строки нужно составить новую строку, объединив части исходной строкидо и после удаляемого участка. Срез s[:3] означает «от начала строки до символа s[3], не включая его», а запись s[9:] – «все символы, начиная с s[9] до конца строки». Таким образом, в переменной s1 остаётся значение "0129".

s = "0123456789"
s1 = s[3:8]

r

С помощью срезов можно вставить новый фрагмент внутрь строки. Переменная s получит значение "012ABC3456789".

s = "aAbBcC"
s1 = s.upper() # "AABBCC"
s2 = s.lower() # "aabbcc"

r

В Python существует множество встроенных методов для работы с символьными строками.Например, методы upper и lower позволяют перевести строку соответственно в верхний и нижний регистр.

s = "abc"
print ( s.isdigit() ) # False
s1 = "123"
print ( s1.isdigit() ) # True

r

А метод isdigit проверяет, все ли символы строки – цифры, и возвращает логическое значение.

Поиск в строках

s = "Здесь был Вася."
n = s.find ( "с" ) # n = 3
if n >= 0:
print ( "Номер символа", n )
else:
print ( "Символ не найден." )

r

В Python существует функция для поиска подстроки (и отдельного символа) в символьнойстроке. Эта функция называется find, она определена для символьных строк и вызывается какметод, с помощью точечной записи. В скобках нужно указать образец для поиска. Метод find возвращает целое число – номер символа, с которого начинается образец (буква "с") в строке s. Если в строке несколько образцов, функция находит первый из них. Если образецне найден, функция возвращает «–1». В рассмотренном примерев переменную n будет записаночисло 3.

s = "Здесь был Вася."
n = s.rfind ( "с" )

r

Аналогичный метод rfind (от англ. reverse find – искать в обратную сторону) ищет последнее вхождение образца в строке. Для той же строки s, что и в предыдущем примере, метод rfind вернёт 12 (индекс последней буквы «с»)