//: C07:WordList.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.
// Zobrazí seznam slov použitých v dokumentu.
#include <algorithm>
#include <cctype>
#include <cstring>
#include <fstream>
#include <iostream>
#include <iterator>
#include <set>
#include <sstream>
#include <string>
#include "../require.h"
using namespace std;

char nahraditSmeti(char c) {
  // Nechat pouze písmena, mezery (jako oddělovač), a '
  return (isalpha(c) || c == '\'') ? c : ' ';
}

int main(int argc, char* argv[]) {
  char* fname = "WordList.cpp";
  if(argc > 1) fname = argv[1];
  ifstream in(fname);
  assure(in, fname);
  set<string> seznamSlov;
  string radek;
  while(getline(in, radek)) {
    transform(radek.begin(), radek.end(), radek.begin(),
              nahraditSmeti);
    istringstream is(radek);
    string word;
    while(is >> word)
      seznamSlov.insert(word);
  }
  // Výsledky na výstup:
  copy(seznamSlov.begin(), seznamSlov.end(),
       ostream_iterator<string>(cout, "\n"));
} ///:~
