Dear advanced c/g++ programers: A program request me to enter twice input that program probably is tested good on visual c++ 7.1 on window xp, but my system is g++ on linux(Ubuntu10.04) It assume Enter some strings: a b c d ^Z Enter some more strings: d e f g ^Z Union: a b c d e f g Difference: a b c Intersection: d all these you can get from page 273 and 274 of book(c++ cookbook) but my test result is ------------------------------- eric@eric-laptop:~/cppcookbook/ch7$ ./a.out Enter a series of strings: a b c d ^Z [7]+ Stopped ./a.out eric@eric-laptop:~/cppcookbook/ch7$ ./a.out Enter a series of strings: a b c d {a, b, c, d} Segmentation fault ------------------------------------------------------------------- second case , I used <Enter><Control-D> first case, I used <Enter><Control-Z> the following in the program I tested, you still can download from http://examples.oreilly.com/9780596007614/ ------------------------------------------------------------------------------------------------ // Example 7-8. Unsing set operations #include <iostream> #include <algorithm> #include <string> #include <set> #include <iterator> #include "utils.h" // For parintContainer(): see 7.10 using namespace std; int main() { cout << "Enter some strings: " istream_iterator<string> start(cin); istream_iterator<string> end; set<string> s1(start, end); cin.clear(); cout << "Enter some more strings: "; set<string> s2(++start, end); set<string> setUnion; set<string> setInter; set<string> setDiff; set_union(s1.begin(), s1.end(), s2,begin(), s2.end(), inserter(setUnion, setUnion.begin())); set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(setDiff, setDiff.begin())); cout << "Union:\n"; printContainer(setUnion); cout << "Difference:\n"; printContainer(setDiff); cout << "Intersection:\n"; printContainer(setinter); } -------------------------------------------------------------------------------------------------- utils.h ------------------------------- // Example 7-12. Writing your own printing function #include <iostream> #include <string> #include <algorithm> #include <iterator> #include <vector> using namespace std; template<typename C> void printContainer(const C& c, char delim = ',', ostream& out = cout) { printRange(c.begin(), c.end(), delim, out); } template<typename Fwd> void printRange(Fwd first, Fwd last, char delim = ',', ostream& out = cout) { out << "{"; while (first != last) { out << *first; if (++first != last) out << delim << ' '; } out << "}" << endl; } ------------------------------------------------------------------------------------------------------------------ Ned and thanks your help a lot in advance Eric