Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在不使用库函数的情况下查找字符串中子字符串出现次数的程序_Python_String_Python 3.x - Fatal编程技术网

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

Python 在不使用库函数的情况下查找字符串中子字符串出现次数的程序,python,string,python-3.x,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] != '

到目前为止,我已经到达这里,但程序总是返回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)

如果希望它尽可能简单,那么应该使用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

返回子字符串sub在字符串S[开始:结束]中不重叠的出现次数。可选参数start和end解释为切片表示法


首先,不要调用自己的变量
str
;它屏蔽了一个内置的Python

其次,您迭代的值是错误的,子字符串的长度不是字符串

第三,您的逻辑是完全错误的,您将输入字符串构建到子字符串的长度,每次都测试它是否是子字符串,如果到达一个空格,则重置计数

相反,请尝试:

count = 0
for i in range(len(string)):
    if string[i:i+len(substring)] == substring:
        count += 1
print(count)
这将沿字符串移动与子字符串长度相同的“窗口”,每个匹配数为1


更好的是,作为JAB suggsts,只需使用
count

但是,这正是我不想使用的。如果很复杂,不用担心。但是,没有库函数。@VedantGanjoo你在问题中说你希望它尽可能简单。在不导入任何模块的情况下,使用Python为您提供的功能是不丢脸的;作为初学者,在开始重新实现之前,您应该先学习如何使用该语言附带的功能。这基本上就像有人想学习驾驶,然后您告诉他们叫出租车一样。@VedantGanjoo那么您不应该使用Python,所有运算符都是根据有效的库函数定义的
a+=str[i]
实际上是
a=a.\uuu add\uuuuuuuuuuuuuuuuuuu(str.\uuuuuu getitem\uuuuuuuuuuuuuui))
,等等(为了提高效率,可能会有一些内置的例外,但这是一般情况)@thg435我想说的是,这更像是一个想出去开车的人,而不想先花时间学习安全驾驶的基本知识。这又增加了1次。如果出现次数为2,则显示3。您的方法存在问题。当字符串为
aaaaaaa
且子字符串为
aaa
时会发生什么情况?如果您想避免重叠,您需要将索引变量移出循环声明,可能需要切换到
,而i
用于声明,并在找到匹配项时执行
i+=len(substring)
。@VedantGanjoo是的,抱歉,修复了该错误。请给我代码。我太糊涂了。可能查看代码会消除我的困惑。@VedantGanjoo是的,没错,
“bob”
“bobs”
的子字符串。如果你必须匹配空格,程序会变得更复杂——标点符号等呢?