为何我的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
相关产品推荐
相关产品推荐

