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());