//: C07:TokenIteratorTest.cpp {-g++} // From "Thinking in C++, Volume 2", by Bruce Eckel & Chuck Allison. // (c) 1995-2004 MindView, Inc. All Rights Reserved. // See source code use permissions stated in the file 'License.txt', // distributed with the code package available at www.MindView.net. #include #include #include #include #include #include "TokenIterator.h" #include "../require.h" using namespace std; int main(int argc, char* argv[]) { char* fname = "TokenIteratorTest.cpp"; if(argc > 1) fname = argv[1]; ifstream in(fname); assure(in, fname); ostream_iterator out(cout, "\n"); typedef istreambuf_iterator IsbIt; IsbIt begin(in), isbEnd; Delimiters delimiters(" \t\n~;()\"<>:{}[]+-=&*#.,/\\"); TokenIterator wordIter(begin, isbEnd, delimiters), end; vector wordlist; copy(wordIter, end, back_inserter(wordlist)); // Output results: copy(wordlist.begin(), wordlist.end(), out); *out++ = "-----------------------------------"; // Use a char array as the source: char* cp = "typedef std::istreambuf_iterator It"; TokenIterator charIter(cp, cp + strlen(cp), delimiters), end2; vector wordlist2; copy(charIter, end2, back_inserter(wordlist2)); copy(wordlist2.begin(), wordlist2.end(), out); *out++ = "-----------------------------------"; // Use a deque as the source: ifstream in2("TokenIteratorTest.cpp"); deque dc; copy(IsbIt(in2), IsbIt(), back_inserter(dc)); TokenIterator::iterator,Delimiters> dcIter(dc.begin(), dc.end(), delimiters), end3; vector wordlist3; copy(dcIter, end3, back_inserter(wordlist3)); copy(wordlist3.begin(), wordlist3.end(), out); *out++ = "-----------------------------------"; // Reproduce the Wordlist.cpp example: ifstream in3("TokenIteratorTest.cpp"); TokenIterator wordIter2(IsbIt(in3), isbEnd, delimiters); set wordlist4; while(wordIter2 != end) wordlist4.insert(*wordIter2++); copy(wordlist4.begin(), wordlist4.end(), out); } ///:~