Нахождение подстроки внутри строки и ее среза?

1

Я пытался помочь моему другу с его заданием, и я даже не могу понять, с чего начать. Я могу получить его, чтобы определить подстроку внутри строки, но предоставление туда, где она начинается, беспокоит меня. Я был у него часами. Любая помощь приветствуется. Вот все, что у меня есть о задании ниже.

PS. весь его класс не знает, как это сделать. Учитель дал им что-то из своей и моей лиги.

Напишите программу, которая просит пользователя ввести две строки stringA и stringB.

  • Программа должна сначала найти все начальные позиции в строке A, где появляется строка B.

    Например, если stringA является "the car is in that carport", а stringB "car", программа должна сообщить, что строка B встречается в строке A, начиная с позиций 4 и 19 (помните, что строка начинается в позиции 0).

  • Далее программа должна найти все начальные позиции в строке A, где stringB почти появляется.

    • Что означает "почти", так это то, что одна из букв stringB не матч.
    • Например если stringA является таким же, как указано выше, а stringB - "the", программа должен сообщить, что stringB почти появляется, начиная с позиции 14, что является началом строка "tha".
    • Обратите внимание что он не сообщает, что он почти появляется, начиная с позиции 0, потому что там появляется с нулевыми несоответствиями.
  • Наконец, программа должна найти все начальные позиции в stringA где обратное Появится строка B.

    • Например, если stringA является таким же, как указано выше, и stringB является "rop", затем программа должна сообщать, что обратная строка stringB появляется в stringA, начиная с позиции 22.

Программа equalsubstrings.py полезна для понимания того, как напишите эту программу.

Теги:
string
indexing
substring

3 ответа

1
stringA = "the car is in that carport"
stringB = "the"

exact = []
reverse = []
almost = []

lenA = len(stringA)
lenB = len(stringB)
limit = lenA - lenB
reversedB = stringB[::-1]

pos = stringA.find(stringB)
while pos >= 0:
    exact.append(pos)
    pos = stringA.find(stringB, pos + 1)

pos = stringA.find(reversedB)
while pos >= 0:
    exact.append(pos)
    pos = stringA.find(reversedB, pos + 1)

for i in range(limit):
    substrA = stringA[i:i+lenB]
    misses = 0
    for j in range(lenB):
        if substrA[j] != stringB[j]:
            misses += 1
    if misses == 1:
        almost.append(i)

print exact, almost, reverse
  • 0
    осторожно, ты собираешься получить некоторые отрицательные голоса от домашнего патруля.
  • 0
    @DTing: Да, может быть. Я просто думал, что дополнительный уровень косвенности (мы даем подсказки парню, пытающемуся помочь) сделает все, что мы скажем, бессмысленным.
0

Я бы использовал модуль re.

  • re.finditer позволяет пройти через все совпадения подстроки в строке.
  • Каждое совпадение предоставит вам "объект соответствия".
  • Используйте mo.start() в любом объекте соответствия, чтобы найти индекс этого совпадения в строке.
  • Для "почти" совпадений перейдите к строке stringB char -by- char, заменив текущий символ на [^<current_character>] и повторите процедуру соответствия для каждого результирующего регулярного выражения, записав все совпадения.
  • Наконец, выполните простой поиск с обратной строкой stringB (см. в другом месте).

Преимущество такого подхода: вы хорошо понимаете re:-).

Кстати: Какова таинственная программа equalsubstrings.py?; -.)

0

Я дам вам две подсказки:

Чтобы проверить, является ли строка подстрокой другого, вы можете сделать:

  • Используйте find:
  

a = "это тест"

         

б = "тест"

         

a.find(б, 0,14)

  

10

  • используйте оператор in, как в следующем примере:
  

a = "это тест"     б = "тест"     c = "не связанный текст"     b в     Правда     b в c     False

  

Чтобы изменить строку, сделайте следующее:

>>> a="this is a test"
>>> a[::-1]
'tset a si siht'

Удачи вам в домашнем задании

  • 1
    in менее полезен, чем string#find .
  • 0
    @ Амадан, ты прав. Обновлено.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню