10815. Первый словарь Энди

 

Энди хочет выписать все слова из заданного текста и отсортировать их в алфавитном порядке, получив свой первый словарь. Слова в словаре не повторяются, все большие буквы следует заменить маленькими. Слова содержат только буквы латинского алфавита.

 

Вход. Текст заканчивается символом «конец файла» и содержит не более 5000 строк. Каждая строка имеет не более 200 символов.

 

Выход. Вывести все слова из текста в алфавитном порядке, каждое слово выводить в отдельной строке.

 

Пример входа

Adventures in Disneyland
 
Two blondes were going to Disneyland when they came to a fork in the
road. The sign read: "Disneyland Left."
 
So they went home.

 

Пример выхода

a
adventures
blondes
came
disneyland
fork
going
home
in
left
read
road
sign
so
the
they
to
two
went
were
when

 

 

РЕШЕНИЕ

обработка текста

 

Анализ алгоритма

Читаем текст, выделяем из него слова, состоящие из символов латинского алфавита, и заносим их в переменную типа множество (set). Слова автоматически сортируются. Если некоторое слово в тексте повторяется, то во множество оно будет занесено  только один раз. Далее при помощи итератора последовательно выводим слова. Если в последовательности букв встречается апостроф (например andy’s), то такую последовательность считаем как два разных слова: andy и s.

 

Реализация алгоритма

Объявим переменную SetS типа set<string>, в которую будем заносить найденные слова. Читать входные слова будем в символьный массив s.

 

set<string> SetS;

set<string>::iterator iter;

char s[201];

 

Поскольку текст не обязательно начинается с буквы латинского алфавита, то пропустим начальные символы, не являющиеся буквами.

 

scanf("%[^a-zA-Z]",s);

 

Читаем слово, состоящее только из заглавных и прописных букв латинского алфавита в переменную s, заменяем все буквы на маленькие и заносим слово во множество SetS. Пропускаем все символы, не являющиеся буквами, читая их в массив s.

 

while(scanf("%[a-zA-Z]",s) == 1)

{

  for(int i = 0; i < strlen(s); i++) s[i] = tolower(s[i]);

  SetS.insert(s);

  scanf("%[^a-zA-Z]",s);

}

 

Выводим слова в алфавитном порядке.

 

for(iter = SetS.begin(); iter != SetS.end(); iter++)

  printf("%s\n",(*iter).c_str());