C++程序求助:筛选含指定字符的单词时输出内容缺失
问题诊断与修复
你的代码核心问题出在输出符合条件单词时的额外i++操作。
原代码的for循环中,当找到包含指定字符的单词后,你手动执行了i++,但for循环本身每次迭代结束都会自动执行i++,这就导致每次匹配成功后,会跳过下一个单词的检查。比如:
- 处理索引0的
red后,手动i++让i变成1,循环自身的i++又把i变成2,直接跳过了索引1的roses,这就是输出缺失部分符合条件单词的原因。
修复后的代码
#include<iostream> #include<vector> using namespace std; int main() { int len; cin>>len; string inpt; vector<string> vect; for(int i =0;i<len;i++){ cin>>inpt; vect.push_back(inpt); } char ch; cin>>ch; for(int i =0;i<len;i++){ size_t found = vect.at(i).find(ch); if (found != string::npos){ cout<<vect.at(i)<<endl; // 移除多余的i++,避免跳过下一个单词 } } return 0; }
修复说明
- 移除
if块内的i++语句,让for循环的自动迭代处理索引递增,确保每个单词都会被检查到。 - 可以去掉原代码中无意义的
cout<<"";语句,代码更简洁且不影响功能。
测试示例输入后,修复后的代码会输出所有包含指定字符的单词,与预期结果一致。
内容的提问来源于stack exchange,提问作者Gregory McNeal
相关产品推荐
相关产品推荐

