enter code here
#include
#include
#include
#include
#include
using namespace std;
ifstream& open_file(ifstream&, const string&);
int main(int argc, char* argv[])
{
vector vec1;
vector vec2;
ifstream record_file1;
ifstream record_file2;
open_file(record_file1,"input.txt");
open_file(record_file2,"ForbiddenWord.txt");
ofstream outfile("output.txt");
if(!record_file1.is_open() || !record_file2.is_open())
{
cout<<"文件打不开!!!"< return 1;
}
copy(istream_iterator(record_file1), istream_iterator(), back_inserter(vec1));
copy(istream_iterator(record_file2), istream_iterator(), back_inserter(vec2));
vector::iterator presult;
int count=0;
for(int i=0;i presult=find(vec1.begin(),vec1.end(),vec2[i]);
while(presult!=vec1.end()){
*presult = "为奥运加油";
++count;
presult=find(presult,vec1.end(),vec2[i]);
}
presult=find(presult,vec1.end(),vec2[i]);
}
if(count>=5)
outfile<<"非法文档";
else
copy(vec1.begin(), vec1.end(), ostream_iterator(outfile, " "));
cout << "文件已输出" << endl;
return 0;
}
ifstream& open_file(ifstream& in, const string& file)
{
in.close();
in.clear();
in.open(file.c_str());
return in;
}
这个小程序,麻烦大家能修改下吗,不能使用迭代器iterator,求大家修改下,换成list应该怎么做
该回答引用ChatGPT
以下是修改后的代码,使用了 std::list 替代了 std::vector:
#include <iostream>
#include <fstream>
#include <string>
#include <list>
using namespace std;
ifstream& open_file(ifstream& in, const string& file);
int main(int argc, char* argv[]) {
list<string> lst1;
list<string> lst2;
ifstream record_file1;
ifstream record_file2;
open_file(record_file1, "input.txt");
open_file(record_file2, "ForbiddenWord.txt");
ofstream outfile("output.txt");
if (!record_file1.is_open() || !record_file2.is_open()) {
cout << "文件打不开!!!" << endl;
return 1;
}
copy(istream_iterator<string>(record_file1), istream_iterator<string>(), back_inserter(lst1));
copy(istream_iterator<string>(record_file2), istream_iterator<string>(), back_inserter(lst2));
list<string>::iterator presult;
int count = 0;
for (auto iter = lst2.begin(); iter != lst2.end(); ++iter) {
presult = find(lst1.begin(), lst1.end(), *iter);
while (presult != lst1.end()) {
*presult = "为奥运加油";
++count;
presult = find(presult, lst1.end(), *iter);
}
}
if (count >= 5) {
outfile << "非法文档";
} else {
copy(lst1.begin(), lst1.end(), ostream_iterator<string>(outfile, " "));
}
cout << "文件已输出" << endl;
return 0;
}
ifstream& open_file(ifstream& in, const string& file) {
in.close();
in.clear();
in.open(file.c_str());
return in;
}
修改思路:
将 vector 修改为 list。
迭代器 vector::iterator 修改为 list::iterator。
istream_iterator 和 ostream_iterator 的模板参数由 vector::value_type 修改为 string。
其余代码保持不变。