C++中text[i+j]索引相加逻辑及嵌套循环功能疑问
C++屏蔽单词项目中嵌套循环索引相加的逻辑解析
问题背景
刚完成Codecademy的一个C++项目,功能是实现输入短语中屏蔽指定单词的功能。查看示例解决方案时,对嵌套for循环里的text[i+j]逻辑感到困惑:为何要将两个索引相加?它的具体作用是什么?相关代码片段如下:
for (int i = 0; i < text.size(); ++i) { int match = 0; for (int j = 0; j < word.size(); ++j) { if (text[i+j] == word[j]) { ++match; } }
逻辑解析
- 外层循环的
i代表待检查文本text中当前匹配的起始位置,遍历text的每个字符作为可能的匹配起点。 - 内层循环的
j代表目标屏蔽词word中的字符索引,遍历word的每个字符用于逐位对比。 text[i+j]的作用是:从text的第i位起始位置开始,往后偏移j位,拿到对应位置的字符,和word的第j位字符做对比。这样就能逐字符验证:text中从i开始的连续一段字符,是否和word完全一致。
举个实际例子:假设text是"hello bad word",word是"bad"。当外层循环的i走到text中'b'的索引位置(假设是6),内层循环的j从0到2:
j=0时,text[6+0]就是'b',和word[0]的'b'匹配;j=1时,text[6+1]就是'a',和word[1]的'a'匹配;j=2时,text[6+2]就是'd',和word[2]的'd'匹配;
此时match会等于word.size(),就说明找到需要屏蔽的单词,后续代码会执行替换屏蔽的操作。
内容的提问来源于stack exchange,提问作者Amy
相关产品推荐
相关产品推荐

