一种程序,用于在不使用库函数的情况下查找字符串中子字符串的出现次数

时间:2014-01-28 15:21:37

标签: python string python-3.x

到目前为止,我已到达此处,但程序始终返回1。 我不想使用库函数。请帮忙! 因为,我是初学者,我希望代码尽可能简单。谢谢!

str = input("Enter The String: ")
substr = input("Enter The Sub-String: ")
l = len(str)
count = 0
es = ''
for i in range (l):
    es += str[i]
    if es == substr:
       if str[i+1] != ' ':
          count = 0
        else:
            count += 1
            es = ''
print (count)

2 个答案:

答案 0 :(得分:2)

首先,不要调用自己的变量str;它掩盖了内置的Python。

其次,你正在迭代错误的值,子串的长度不是字符串。

第三,你的逻辑是完全错误的,你建立输入字符串直到子字符串的长度,每次测试它是否是子字符串,如果你到达空格则重置计数。

相反,请尝试:

count = 0
for i in range(len(string)):
    if string[i:i+len(substring)] == substring:
        count += 1
print(count)

这会移动一个与字符串中子字符串长度相同的“窗口”,每个匹配的数量为1。

更好的是,正如JAB所说,只需使用count

答案 1 :(得分:0)

如果您希望它尽可能简单,您应该使用Python提供的内置功能。我不建议使用str作为变量名称,因为它是内置类型之一;它有效,因为str不是保留关键字,但隐藏str类可能不是一个好主意。

s = input("Enter The String: ")
sub_s = input("Enter The Sub-String: ")

print(s.count(sub_s))

来自str.count的文档字符串:

  

S.count(sub [,start [,end]]) - > INT

     

返回字符串S [start:end]中substring sub的非重叠出现次数。可选参数start和end被解释为切片表示法。