#include <iostream>
#include <strstream>
#include <fstream>
#include <set>
#include <string>
typedef std::set<std::string> fset;
//пересечение множеств
void intersect(std::ostream& _o,
const fset& a, const fset& b){
fset::const_iterator p1 = a.begin();
fset::const_iterator p2 = b.begin();
while((p1 != a.end()) && (p2 != b.end())){
if(*p1 < *p2)
++p1;
else {
if(*p1 == *p2){
_o << *p1 << std::endl;
++p1;
}
++p2;
}
}
_o.flush();
}
//пересечение входных потоков
void str_intersect(std::ostream& _o,
std::istream& _i1,
std::istream& _i2){
fset sa, sb;
std::string s;
while(std::getline(_i1, s) && ! _i1.fail())
sa.insert(s);
while(std::getline(_i2, s) && ! _i2.fail())
sb.insert(s);
intersect(_o, sa, sb);
sa.clear();
sb.clear();
}
int main(void){
// для примера
char s1[] = "Здравствуйте, нужно записать\n"\
"в text3.txt строки, которые\n"\
"есть и в text1.txt, и в text2.txt\n"\
"помогите, пожалуйста.\n"\
"конец";
std::istrstream sp1(s1);
char s2[] = "Здравствуйте, нужно записать\n"\
"в text8.txt СТРОКИ, которые, \n"\
"есть и в text1.txt, и в text2.txt\n"\
"помогите мне, пожалуйста!\n"\
"конец";
std::istrstream sp2(s2);
str_intersect(std::cout, sp1, sp2);
/* работа с файлами
std::ifstream f1("file1.txt");
std::ifstream f2("file2.txt");
std::ofstream f3("result.txt");
str_intersect(f3, f1, f2);
f1.close();
f2.close();
f3.close();
*/
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3Ryc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPHN0cmluZz4KCnR5cGVkZWYgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IGZzZXQ7CgoKLy/Qv9C10YDQtdGB0LXRh9C10L3QuNC1INC80L3QvtC20LXRgdGC0LIKdm9pZCBpbnRlcnNlY3Qoc3RkOjpvc3RyZWFtJiBfbywgCgkgICAgICAgICAgIGNvbnN0IGZzZXQmIGEsIGNvbnN0IGZzZXQmIGIpewoJZnNldDo6Y29uc3RfaXRlcmF0b3IgcDEgPSBhLmJlZ2luKCk7Cglmc2V0Ojpjb25zdF9pdGVyYXRvciBwMiA9IGIuYmVnaW4oKTsKCXdoaWxlKChwMSAhPSBhLmVuZCgpKSAmJiAocDIgIT0gYi5lbmQoKSkpewoJCWlmKCpwMSA8ICpwMikKCQkJKytwMTsKCQllbHNlIHsgCgkJCWlmKCpwMSA9PSAqcDIpewoJCQkJX28gPDwgKnAxIDw8IHN0ZDo6ZW5kbDsKCQkJCSsrcDE7CgkJCX0KCQkJKytwMjsKCQl9Cgl9Cglfby5mbHVzaCgpOwp9CgoKLy/Qv9C10YDQtdGB0LXRh9C10L3QuNC1INCy0YXQvtC00L3Ri9GFINC/0L7RgtC+0LrQvtCyCnZvaWQgc3RyX2ludGVyc2VjdChzdGQ6Om9zdHJlYW0mIF9vLCAKCSAgICAgICAgICAgICAgIHN0ZDo6aXN0cmVhbSYgX2kxLCAKCSAgICAgICAgICAgICAgIHN0ZDo6aXN0cmVhbSYgX2kyKXsKCWZzZXQgc2EsIHNiOwoJc3RkOjpzdHJpbmcgczsKCgl3aGlsZShzdGQ6OmdldGxpbmUoX2kxLCBzKSAmJiAhIF9pMS5mYWlsKCkpCgkJc2EuaW5zZXJ0KHMpOwoJCgl3aGlsZShzdGQ6OmdldGxpbmUoX2kyLCBzKSAmJiAhIF9pMi5mYWlsKCkpCgkJc2IuaW5zZXJ0KHMpOwoKCWludGVyc2VjdChfbywgc2EsIHNiKTsKCXNhLmNsZWFyKCk7CglzYi5jbGVhcigpOwp9CgoKaW50IG1haW4odm9pZCl7CgkvLyDQtNC70Y8g0L/RgNC40LzQtdGA0LAKCWNoYXIgczFbXSA9ICLQl9C00YDQsNCy0YHRgtCy0YPQudGC0LUsINC90YPQttC90L4g0LfQsNC/0LjRgdCw0YLRjFxuIlwKCSAgICAgICAgICAgICLQsiB0ZXh0My50eHQg0YHRgtGA0L7QutC4LCDQutC+0YLQvtGA0YvQtVxuIlwKCSAgICAgICAgICAgICLQtdGB0YLRjCDQuCDQsiB0ZXh0MS50eHQsINC4INCyIHRleHQyLnR4dFxuIlwKCSAgICAgICAgICAgICLQv9C+0LzQvtCz0LjRgtC1LCDQv9C+0LbQsNC70YPQudGB0YLQsC5cbiJcCgkgICAgICAgICAgICAi0LrQvtC90LXRhiI7CglzdGQ6OmlzdHJzdHJlYW0gc3AxKHMxKTsKCgljaGFyIHMyW10gPSAi0JfQtNGA0LDQstGB0YLQstGD0LnRgtC1LCDQvdGD0LbQvdC+INC30LDQv9C40YHQsNGC0YxcbiJcCgkgICAgICAgICAgICAi0LIgdGV4dDgudHh0INCh0KLQoNCe0JrQmCwg0LrQvtGC0L7RgNGL0LUsIFxuIlwKCSAgICAgICAgICAgICLQtdGB0YLRjCDQuCDQsiB0ZXh0MS50eHQsINC4INCyIHRleHQyLnR4dFxuIlwKCSAgICAgICAgICAgICLQv9C+0LzQvtCz0LjRgtC1INC80L3QtSwg0L/QvtC20LDQu9GD0LnRgdGC0LAhXG4iXAoJICAgICAgICAgICAgItC60L7QvdC10YYiOwoJc3RkOjppc3Ryc3RyZWFtIHNwMihzMik7CgoJc3RyX2ludGVyc2VjdChzdGQ6OmNvdXQsIHNwMSwgc3AyKTsKCi8qCdGA0LDQsdC+0YLQsCDRgSDRhNCw0LnQu9Cw0LzQuAoJc3RkOjppZnN0cmVhbSBmMSgiZmlsZTEudHh0Iik7CglzdGQ6Omlmc3RyZWFtIGYyKCJmaWxlMi50eHQiKTsKCXN0ZDo6b2ZzdHJlYW0gZjMoInJlc3VsdC50eHQiKTsKCXN0cl9pbnRlcnNlY3QoZjMsIGYxLCBmMik7CglmMS5jbG9zZSgpOwoJZjIuY2xvc2UoKTsKCWYzLmNsb3NlKCk7CiovCglyZXR1cm4gMDsKfQo=