鱼C论坛

 找回密码
 立即注册
查看: 2004|回复: 11

[已解决]第18讲:def findStr(desStr, subStr):

[复制链接]
发表于 2021-3-9 16:08:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼的代码是这样的
def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
        print('在目标字符串中未找到字符串!')
    else:
        for each1 in range(length-1):      
            if desStr[each1] == subStr[0]:
                if desStr[each1+1] == subStr[1]:
                    count += 1
                    
        print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)
其中我对 length-1 的理解是这样的:length - n:n取决于子字符串的长度,若目标字符串的最后存在子字符串,需要确保能将子字符串完全展示出来
但我后来用查询发现理解是错的,可是我不知道问题出在哪,有哪位大佬能回答下吗??
最佳答案
2021-3-10 09:54:44
孤妓与酒 发表于 2021-3-10 09:36
这个我倒是清楚,但我如果做子字符串有n个的呢,后面的修改我清楚

我就想知道前面是不是还是 length - ...

子字符串有多个

length-len(子字符串)+1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-9 16:08:42 | 显示全部楼层
???字体颜色是怎么改的???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-9 16:16:11 | 显示全部楼层
这个程序只能用来测试子字符串是两个字符的情况

length-1是避免原字符串出现索引错误

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 09:36:34 | 显示全部楼层
逃兵 发表于 2021-3-9 16:16
这个程序只能用来测试子字符串是两个字符的情况

length-1是避免原字符串出现索引错误

这个我倒是清楚,但我如果做子字符串有n个的呢,后面的修改我清楚
...
if desStr[each1 + (n-1) ] == subStr[ (n-1) ]
我就想知道前面是不是还是 length - 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 09:54:44 | 显示全部楼层    本楼为最佳答案   
孤妓与酒 发表于 2021-3-10 09:36
这个我倒是清楚,但我如果做子字符串有n个的呢,后面的修改我清楚

我就想知道前面是不是还是 length - ...

子字符串有多个

length-len(子字符串)+1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-3-10 10:08:41 | 显示全部楼层
逃兵 发表于 2021-3-10 09:54
子字符串有多个

length-len(子字符串)+1

那就好,那我也算没理解错,就少了个+1,感想大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 10:28:48 | 显示全部楼层
def findStr(desStr, subStr):
    count = 0       #用于统计子字符串出现次数
    flag = 0        #标记是否找到子字符串
    length1 = len(desStr)   #源字符串长度
    length2 = len(subStr)   #子字符串长度
    if subStr not in desStr:  #如果子字符串未出现在源字符串内,则输出“未找到”
        print('在目标字符串中未找到字符串!')
    else:
        for each1 in range(length1-(length2-1)):    #从源字符串的第一个字符位开始查找,
            if desStr[each1] == subStr[0]:    #找到与子字符串第一符号匹配的位置
                flag = 1                    #标记为改为1
                for i in range(1,length2):  #开始判断子字符串第二个符号及后面是否匹配
                    if desStr[each1+i] != subStr[i]:  #不匹配则标志位重置为0,结束循环
                        flag = 0
                        break
                if flag==1:                  #如果标志位依然为1,则计数+1
                    count += 1
                    
        print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-3-10 10:39:30 | 显示全部楼层

大佬成功让我再一次大脑炸裂 length1-(length2-1) 是个什么意思??
如果我没理解错的话,当子字符串是2个的时候,可以直接是 length-1 ;如果子字符串是两个以上的,就比如是n个的话这个要怎么改??
而且这样改的话,好像对多子字符串太不要友好了,后面进行判断的额话就要加更多的东西,当然大佬这个逻辑更加严谨是没问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-10 10:41:00 | 显示全部楼层
孤妓与酒 发表于 2021-3-10 10:39
大佬成功让我再一次大脑炸裂 length1-(length2-1) 是个什么意思??
如果我没理解错的话,当子字符串是2 ...

等等,按照这个逻辑来的话,n个子字符是 length1 - (n-1)??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 10:41:49 | 显示全部楼层
孤妓与酒 发表于 2021-3-10 10:41
等等,按照这个逻辑来的话,n个子字符是 length1 - (n-1)??

对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 10:43:04 | 显示全部楼层
因为如果length剩余的长度<子字符串的长度,那么后面就不用判断了,肯定是不包含的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-3-10 10:47:11 | 显示全部楼层
atai0622 发表于 2021-3-10 10:43
因为如果length剩余的长度

嗯,也对,长度都不够也就不需要执行判断了,肯定是不可能包含的,我转牛角尖里了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 08:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表