You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的C++审查代码在条件不满足时仍进入if语句?

C++敏感词审查程序异常,错误替换非目标文本

我在完成Code Academy的敏感词审查程序挑战时遇到了问题,程序出现了异常替换行为。

代码片段

main.cpp

int main() {
  std::string word = "broccoli";
  std::string phrase = "This phrase is broccoli!";

  censure(word, phrase);

  std::cout << phrase << "\n";
}

functions.hpp

void censure(std::string &targetword, std::string &input);

functions.cpp

void censure(std::string &targetword, std::string &input) {

  std::string asterisk = "*";

  for(int i = 0; i < input.size(); i++) {
    if((input[i,i+1,i+2,i+3,i+4,i+5,i+6,i+7] == targetword[0,1,2,3,4,5,6,7])) {
      input[i + 0] = asterisk[0];
      input[i + 1] = asterisk[0];
      input[i + 2] = asterisk[0];
      input[i + 3] = asterisk[0];
      input[i + 4] = asterisk[0];
      input[i + 5] = asterisk[0];
      input[i + 6] = asterisk[0];
      input[i + 7] = asterisk[0];
    }
  }
}

问题现象

预期输出:This phrase is ********!
实际输出:This ********s *********!

我的思路是从左到右逐次检查输入字符串的8个连续字符(如0-7、1-8等),匹配目标词后替换为星号,但程序却在随机修改内容。

已定位的问题原因

编辑:已找到问题所在——if语句里使用了逗号表达式,这导致实际只判断了input[i+7] == targetword[7]这一个条件,只要单个字符匹配就触发替换(比如触发了"is"中的"i")。后续需要改成用独立的&&条件语句,逐个检查每个位置的字符是否匹配。

内容的提问来源于stack exchange,提问作者lutemis anlew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:46:12