#python
Вопрос:
Я пытаюсь найти ответ «нет». вхождения подстроки в строку. Я знаю, что count
эту функцию можно использовать, но она предназначена для неперекрывающихся случаев.
Вот мой код, который я нашел в Интернете
string = input("Enter the string: ");
sub_string = input("Enter the substring: ")
count = 0
for i in range(0, len(string)):
for j in range(0, len(sub_string)):
if string[i] == sub_string[j]:
j = 1
else:
j = 0
if j == len(sub_string):
count = 1
print(count)
При этом во 2-м цикле мы сравниваем каждый элемент sub_string[j]
с string[i]
тем, который одинаков в этом цикле, затем, как j увеличит и увеличит количество после проверки следующего условия if.
Ответ №1:
Таким образом, код, который у вас есть, неверен, так как он будет проходить проверку if до тех пор, пока последний символ совпадает со строкой, например, строка "sagar is sagar not sa saga sagar r"
и подстрока "sagar"
вернут 4, а не 3.
Поскольку вы используете j
и то, и другое для подсчета количества совпадений, а также индекса для подстроки, она перезаписывается во внутреннем цикле на каждой итерации. Это означает, что для прохождения проверки под циклом потребуется только совпадение с самой последней буквой.
Возможно, вы захотите изменить его на что-то, что проверяет каждый символ, начинающийся с некоторой позиции, и отрицает его, если он не совпадает, например
string = input("Enter the string: ");
sub_string = input("Enter the substring: ")
count = 0
for i in range(0, len(string) - len(sub_string)):
found = True
for j in range(len(sub_string)):
if string[i j] != sub_string[j]:
found = False
break
if found:
count = 1
Ответ №2:
В вашем случае только последние элементы равны, тогда количество увеличится на единицу.
например: если строка есть seg
, а подстрока есть sag
, то количество будет равно единице. это происходит потому , что во втором цикле when j = len(substring)-1
, g
from seg
и sag
будут определены как равные. итак, затем подсчитайте, получите приращение на единицу.
string = input("Enter the string: ");
sub_string = input("Enter the substring: ")
count = 0
for i in range(0, len(string)):
j=0
while i j< len(string) and j <len(sub_string):
if string[i j] == sub_string[j]:
j = 1
else:
break
else:
count = 1
print(count)
попробуйте этот код, если в цикле while не было увеличения числа остановок на единицу.