私はコードを書いています。文字列(i)と部分文字列(sb)を入力すると、コードは部分文字列が文字列に重複して出現する回数をカウントする必要があります。
このコードは、文字列「AAAA」を入力して「A」を検索すると機能しますが((正しい量を返す、4)、「ADAM」を入力して「A」を検索すると、無限ループに陥ります。
私の一生の間、私はこの問題を解決することはできません。
i = input("Enter a string:")
sb = input("Enter a substring:")
count = 0
x = 0 #index from the string found
idxTotal = len(i)
while True:
i.find(sb,x)
if x != idxTotal:
count += 1
x = i.find(sb,x)+1
else:
break
print(count)
あなたは物事を複雑にしすぎると思います。基本的while
に、文字列の終わりに到達していないことをループでチェックする必要があります。さらに、オフセット値をインクリメントすることにより、進行状況を保証する必要があります。
したがって、次のように書くことができます。
x = i.find(sb)
n = 0
while x >= 0:
n += 1
x = i.find(sb, x+1)
# here n is the number of occurrences
print(n)
したがって、最初にaを実行しi.find(sb)
て最初のオカレンスを見つけ、n
(カウント)をゼロに設定します。毎回x >= 0
、次のオカレンスを見つけたので、インクリメントn
してから次のオカレンスを探します。
.find(..)
が返されるまでそれを続けます-1
。その場合、while
ループは停止し、n
要素の数が含まれます。
例えば:
>>> i = 'ADAM'
>>> sb = 'A'
>>> x = i.find(sb)
>>> n = 0
>>> while x >= 0:
... n += 1
... x = i.find(sb, x+1)
...
>>> print(n)
2
これは、次のようなオーバーラップカウントも実行します。
>>> i = 'AAADAAAAAM'
>>> sb = 'AAA'
>>> x = i.find(sb)
>>> n = 0
>>> while x >= 0:
... n += 1
... x = i.find(sb, x+1)
...
>>> print(n)
4
したがって、ここで'AAADAAAAAM'
は4つの一致があります'AAA'
:
AAADAAAAAM
1 AAA
2 AAA
3 AAA
4 AAA
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加