|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写一个函数 findstr(),该函数统计一个长度为 2 的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为 “You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串为 “im”,函数执行后打印“子字母串在目标字符串中共出现 3 次”。
     
程序执行效果:
小甲鱼的代码
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)
我的代码:
def findstr():
print('请输入目标字符串:', end = '')
str1 = input()
print('请输入子字符串(两个字符)', end = '')
str2 = input()
num = str1.count(str2)
print('子字符串在目标字符串中共出现', num, '次')
请帮忙看看我这样写有什么问题?
- def findstr():
- print('请输入目标字符串:', end='')
- str1 = input()
- print('请输入子字符串(两个字符):', end='')
- str2 = input()
-
- # 检查子串长度是否为2
- if len(str2) != 2:
- print('错误:子字符串必须为两个字符')
- return
-
- count = 0
- # 遍历所有可能的起始位置(包括重叠情况)
- for i in range(len(str1)-1):
- if str1[i:i+2] == str2:
- count += 1
-
- if count == 0:
- print('在目标字符串中未找到子字符串!')
- else:
- print('子字符串在目标字符串中共出现', count, '次')
复制代码
你的代码存在两个主要问题:
- 未处理子字符串重叠的情况:str.count() 方法统计的是非重叠出现次数。例如在 "imim" 中找 "im",正确应该统计2次,而用count方法会正确;但在 "iiiim" 中找 "ii",正确应该统计3次(位置0-1、1-2、2-3),用count方法只会统计2次
- 未校验子字符串长度:题目明确要求子字符串长度为2,但你的代码未做校验,如果用户输入1个或3个字符会导致统计错误
改进说明:
1. 通过循环逐字符检查 str1[i:i+2]
2. 遍历范围是 len(str1)-1 确保最后能取到两个字符
3. 增加子字符串长度校验
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|