Примеры решения задач на строки символов. Часть 1
В данной теме приведены примеры решения некоторых распространенных задач на строки символов без использования стандартных функций языка Python.
Перед изучением темы рекомендуется ознакомиться с темами:
- Строки. Общие понятия. Объявление строки. Операции над строками. Примеры
- Экранированные последовательности. Неформатированные строки. Многострочные блоки текста
- Доступ по индексам. Срезы. Получение фрагмента строки. Примеры
Содержание
- 1. Рекурсивная функция CountCharacterToString(). Определение количества вхождений заданного символа в строке
- 2. Функция IsCharDigit(). Определить, есть ли цифрой символ, заданный номером позиции в строке
- 3. Функция IsCharOp(). Определить количество символов +, –, *, /, % в строке
- 4. Функция GetNOccurs(). Определение, сколько раз в данной строке встречается указанная строка
- 5. Функция GetPosFirstOccur(). Определить позицию (номер) первого вхождения подстроки в строке
- 6. Функция IsSubstringToString(). Определение наличия подстроки в строке
- Связанные темы
Search other websites:
1. Рекурсивная функция CountCharacterToString(). Определение количества вхождений заданного символа в строке
# Рекурсивная функция - возвращает количество входжений # указанного символа в списке def CountCharacterToString(c, s): if s=="": # условие завершения цикла return 0 else: if c==s[0]: # сравнение символа с первым элементом строки return 1 + CountCharacterToString(c, s[1:]) # рекурсивный вызов else: return CountCharacterToString(c, s[1:]) # Вызвать функцию CountCharacterToString() n = CountCharacterToString('a', "jprstaajklmnabcdadsad") print("n = ", n)
Результат выполнения программы
n = 5
⇑
2. Функция IsCharDigit(). Определить, есть ли цифрой символ, заданный номером позиции в строке
Функция IsCharDigit() определяет, является ли цифрой символ, который размещается в указанной позиции строки. Функция получает параметры:
- строку, в которой осуществляется поиск;
- номер позиции символа, который нужно проверить.
Ниже приведены 4 способа реализации функции.
2.1. Способ 1. Непосредственное определение принадлежности символа диапазону цифр
При этом способе для определения цифры используется сравнение вида
(s[index]>='0') and (s[index]<='9')
в котором осуществляется определение принадлежности отдельного символа s[index] диапазону чисел от ‘0’ до ‘9’.
# Определение, есть ли в заданной позиции строки цифра def IsCharDigit(s, index): # Проверка, корректно ли значение index if (index<0)or(index>len(s)-1): return False return (s[index]>='0')and(s[index]<='9') # Ввод строки s = input("s = ") # Ввод индекса index = int(input("index = ")) # Вывод результата if IsCharDigit(s, index): print("Yes") else: print("No")
Результат выполнения программы
s = ABC123DEF index = 4 Yes
⇑
2.2. Способ 2. Использование функции ord()
В этом способе можно использовать функцию ord(), которая возвращает код символа. Символ ‘0’ имеет код 48, символ ‘1’ имеет код 49 и т.д. Соответственно, символ, соответствующий последней цифре, имеет код 57.
Поэтому, в вышеприведенном примере (способ 1) фрагмент строки
(s[index]>='0')and(s[index]<='9')
можно заменить следующим фрагментом строки
(ord(s[index])>=48)and(ord(s[index])<=57)
⇑
2.3. Способ 3. Использование стандартной функции isdigit()
Функция isdigit() из библиотеки Python позволяет определить, является ли символ цифрой. С учетом этого, модифицированный вариант функции IsCharDigit() имеет вид
# Определение, размещается ли цифра в заданной позиции строки def IsCharDigit(s, index): # Проверка, корректно ли значение index if (index<0)or(index>len(s)-1): return False return s[index].isdigit() # Ввод строки s = input("s = ") # Ввод индекса index = int(input("index = ")) # Вывод результата if IsCharDigit(s, index): print("Yes") else: print("No")
⇑
2.4. Способ 4. Использование строки сравнения
Этот способ хорошо подходит для определения принадлежности символа некоторому множеству символов, содержащему все возможные значения. Символы, образующие множество символов для сравнения, формируются в виде строки. В нашем случае сравниваются символы цифр, поэтому строка сравнения имеет вид:
sAll = "0123456789"
Вышеприведенная строка содержит все множество цифр числа. В соответствии с вышесказанным, измененная функция IsCharDigit() выглядит следующим образом.
# Определение, размещается ли цифра в указанной позиции строки def IsCharDigit(s, index): # Проверка, корректно ли значение index if (index<0)or(index>len(s)-1): return False # Строка, содержащая все возможные значения, соответствующие цифре sAll = "0123456789" # Цикл поиска в строке sAll символа s[index] for c in sAll: if c == s[index]: # если символ s[index] есть в наборе допустимых символов return True return False # Ввод строки s = input("s = ") # Ввод индекса index = int(input("index = ")) # Вывод результата if IsCharDigit(s, index): print("Yes") else: print("No")
⇑
3. Функция IsCharOp(). Определить количество символов +, –, *, /, % в строке
Функция IsCharOp() получает параметром строку и определяет количество символов операций (+, –, *, /, %) в этой строке. Чтобы уменьшить количество сравнений, в функции используется дополнительная строка
sAll = "+-*/%"
которая содержит все допустимые символы операций.
# Определение, размещается ли цифра в указанной позиции строки def IsCharOp(s): # Строка, содержащая все возможные значения, которые соответствуют цифре sAll = "+-*/%" # Цикл определения количества символов в строке k = 0 # результат for c1 in s: for c2 in sAll: if c1==c2: k = k+1 return k # Ввод строки s = input("s = ") # Вычисление и вывод результата k = IsCharOp(s) print("k = ", k)
Результат выполнения программы
s = fhg+-/*%%%++-ghjg+-% k = 13
⇑
4. Функция GetNOccurs(). Определение, сколько раз в данной строке встречается указанная строка
4.1. Использование стандартной функции count()
В языке Python есть функция count(), которая определяет, сколько раз в данной строке встречается заданная подстрока.
# Определить, сколько в строке встречается подстрока s1 = "abc abcd bcd defg bcdef" s2 = "bc" k = s1.count(s2) print("k = ", k)
Результат выполнения программы
k = 4
⇑
4.2. Решение без использования функции count()
# Определеть, сколько в строке встречается подстрока def GetNOccurs(sub, s): k = 0 # результат index_s = 0 # позиция в строке s из которой происходит поиск подстроки while (index_s < len(s)): f_is=True # флажок наличия подстроки в строке index_sub = 0 # индекс начала сравнения в строке sub # цикл поиска подстроки в строке while index_sub<len(sub): # проверка, достигнут ли конец строки s if (index_s+index_sub) == len(s): f_is = False index_s = len(s)-1 break # проверка на несовпадение символов if s[index_s+index_sub]!=sub[index_sub]: f_is = False break else: index_sub = index_sub+1 # Проверка, все ли символы строки и подстроки совпали if f_is: index_s = index_s + len(sub) # обаботка, если совпали k = k+1 else: index_s = index_s+1 # обработка, если не совпали return k # Использование функции GetNOccurs() s1 = "abccc bcccca bcd" s2 = "cc" k = GetNOccurs(s2, s1) print("k = ", k)
Результат выполнения программы
k = 3
⇑
5. Функция GetPosFirstOccur(). Определить позицию (номер) первого вхождения подстроки в строке
В языке Python есть целый ряд стандартных функций, которые определяют позицию вхождения подстроки в строке. Более подробно об этих стандартных функциях описывается здесь.
В данном примере реализована собственная функция GetPosFirstOccur(), которая определяет позицию (номер) первого вхождения подстроки в строке.
# Определить позицию первого вхождения подстроки в строке. # Строка просматривается слева-направо. def GetPosFirstOccur(sub, s): index_s = 0 # позиция в строке s из которой происходит поиск подстроки while (index_s < len(s)): f_is=True # флажок наличия подстроки в строке index_sub = 0 # индекс начала сравнения в строке sub # цикл поиска подстроки в строке while index_sub<len(sub): # проверка, не достигнут ли конец строки s if (index_s+index_sub) == len(s): f_is = False index_s = len(s)-1 break # проверка на несовпадение символов if s[index_s+index_sub]!=sub[index_sub]: f_is = False break else: index_sub = index_sub+1 # Проверка, все ли символы строки и подстроки совпали if f_is: return index_s # если совпали, то вернуть позицию else: index_s = index_s+1 # обработка, если не совпали return -1 # если не найдена подстрока, то вернуть -1 # Использование функции GetPosFirsOccur() s1 = "abccc bcccca bcd" s2 = "cd" pos = GetPosFirstOccur(s2, s1) print("pos = ", pos)
Результат выполнения программы
pos = 14
⇑
6. Функция IsSubstringToString(). Определение наличия подстроки в строке
Версия 1. В данной функции можно вызывать предварительно разработанную функцию GetNOccurs() из пункта 4.2. Затем обработать возвращенное значение k. Если k>0, то подстрока есть в строке, если k = 0, то подстроки в строке нет. Текст функции будет примерно следующим:
# Функция IsSubstringToString() def IsSubstringToString(sub, s): k = GetNOccurs(sub, s) # Вызвать функцию из п. 4.2. if (k==0): return False else: return True
⇑
Связанные темы
- Решение задач на строки символов. Часть 2
- Решение задач на обработку целых чисел. Часть 1
- Решение задач на обработку целых чисел. Часть 2
⇑