//: C07:WordList2.cpp
// Z knihy "Myslíme v jazyce C++, část 2" od Bruce Eckela a Chucka Allisona.
// (c) 1995-2004 MindView, Inc. Všechna práva vyhrazena.
// Přečtěte si podmínky používání zdrojových kódů umístěné v souboru 
// 'Licence.txt' dodávaném spolu s balíčkem kódu dostupným na www.MindView.net.
// Ukazuje istreambuf_iterator a vkládací iterátory.
#include <cstring>
#include <fstream>
#include <iostream>
#include <iterator>
#include <set>
#include <string>
#include "../require.h"
using namespace std;

int main(int argc, char* argv[]) {
  char* fname = "WordList2.cpp";
  if(argc > 1) fname = argv[1];
  ifstream in(fname);
  assure(in, fname);
  istreambuf_iterator<char> p(in), konec;
  set<string> seznamSlov;
  while(p != konec) {
    string slovo;
    insert_iterator<string> ii(slovo, slovo.begin());
    // Najít první alfa znak:
    while(p != konec && !isalpha(*p))
      ++p;
    // Kopírovat dokud se neobjeví znak, který není písmeno:
    while(p != konec && isalpha(*p))
      *ii++ = *p++;
    if(slovo.size() != 0)
      seznamSlov.insert(slovo);
  }
  // Výsledky na výstup:
  copy(seznamSlov.begin(), seznamSlov.end(),
    ostream_iterator<string>(cout, "\n"));
} ///:~
