如何用do-while循环与if-else统计独立出现的指定违禁词?
问题分析与解决方案
嘿,这个问题我太熟啦!咱们先唠唠为啥会把conCATination里的cat也算进去~
问题原因
你当前的程序应该是直接在文本里搜索cat这个子字符串,只要文本中出现连续的c-a-t(可能还忽略了大小写)就直接计数,但没有判断这个cat是不是一个独立的单词。换句话说,程序没考虑它的上下文——比如它是不是嵌在其他字母中间,就像conCATination里的CAT,其实是单词的一部分,并不是独立出现的cat,但你的程序只会识别连续的字符组合,所以误把它算进去了。
修改方案(用循环+if-else实现)
要解决这个问题,核心是在匹配到cat之后,额外检查它的前后是否是「单词边界」——也就是要么是文本的开头/结尾,要么前后的字符不是字母(比如空格、标点、数字这些)。下面是具体的实现代码(以Python为例):
# 获取输入文本,统一转小写避免大小写干扰(如果只需要匹配小写可去掉.lower()) input_text = input("请输入要检测的文本:").lower() target_word = "cat" target_length = len(target_word) count = 0 text_length = len(input_text) # 遍历所有可能的目标词起始位置 for i in range(text_length - target_length + 1): # 先检查当前位置是否匹配目标词 if input_text[i:i+target_length] == target_word: is_independent = False # 情况1:目标词在文本开头 if i == 0: # 要么目标词就是文本最后三个字符,要么后面跟着非字母 if i + target_length >= text_length: is_independent = True else: if not input_text[i+target_length].isalpha(): is_independent = True # 情况2:目标词在文本结尾 elif i + target_length == text_length: # 前面必须是非字母 if not input_text[i-1].isalpha(): is_independent = True # 情况3:目标词在文本中间 else: # 前后都必须是非字母 if not input_text[i-1].isalpha() and not input_text[i+target_length].isalpha(): is_independent = True # 如果是独立单词,计数加1 if is_independent: count += 1 print(f"独立出现的'cat'次数:{count}")
代码说明
- 统一大小写:把输入文本转成小写,这样
Cat、CAT、cat都会被匹配,如果你只需要严格匹配小写的cat,可以去掉.lower()。 - 循环遍历:逐个检查文本中每个可能的
cat起始位置,确保不会漏掉任何可能的匹配。 - 边界判断:用if-else分三种情况判断目标词是否处于独立边界:
- 在文本开头时,只需检查后面的字符(如果有的话)不是字母;
- 在文本结尾时,只需检查前面的字符不是字母;
- 在文本中间时,前后的字符都不能是字母。
- 计数逻辑:只有符合独立单词条件的
cat才会被计入统计。
这样修改后,像conCATination、acatb这类嵌入在其他单词里的cat就不会被误统计了,而cat、cat!、Hello cat world里的独立cat会被正确计数。
内容的提问来源于stack exchange,提问作者Nathan Lanzieri
相关产品推荐
相关产品推荐

