Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
qwer_11
2 / 2 / 0
Регистрация: 30.10.2011
Сообщений: 16
#1

задача с stl библиотекой и файлами - C++

21.11.2011, 14:21. Просмотров 767. Ответов 7
Метки нет (Все метки)

В текстовом файле input.txt записаны слова – по одному в строке. Необходимо разбить слова на группы так, чтобы в одну группу попали все слова, составленные из одного и того же множества символов. Иными словами, в каждом слове группы должны быть использованы все символы этой группы (может быть, несколько раз). Так, слова «окно» и «конка» не входят в одну группу, а слова «конник» и «инок» - входят. Программа должна подсчитать количество найденных групп и выдать результат на консоль.

Добавлено через 21 час 5 минут
подскажите кто-нить идейку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2011, 14:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос задача с stl библиотекой и файлами (C++):

Работа с библиотекой STL, контейнер map - C++
Ввожу с экрана имя и номер телефона несколько раз, но for_each почему-то выводит на экран только последнего введенного пользователя, а мне...

Работа с файлами С++. Библиотека STL - C++
Пожалуйста, подскажите. Файл читает только одну строку, а в файле больше. Пример : Петров Петр Петрович 10 11 68 Иванов Иван...

Работа с файлами. Библиотека STL - C++
Здравствуйте, помогите пожалуйста с этим заданием) Для цветов, поставляемых на склад задаются: регистрационный номер, название,...

Задача на С++. Алгоритмы библиотеки STL. - C++
Программа должна демонстрировать использование контейнерных классов для хранения встроенных типов данных. В программе выполнить...

Библиотека STL, + задача с её использованием - C++
Доброго времени суток, о существовании библиотеки шаблонов я узнал 2 недели назад. У меня есть задача: Но это глобальная задача,...

Задача со строками библиотеки STL - C++
Приветствую тех, кто пришёл сюда помочь юному падавану, желающему познать силу С++. К делу. У меня стоит задача : Создать программу,...

7
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
21.11.2011, 14:30 #2
можно так,берете первое слово,удаляете из него все повторяющиеся буквы и выстраиваете их в лексографическом порядке то же самое проделываете с остальными.последовательно сравниваете первое слово с остальными удаляя те которые совпадают.переход на второе слово и сравнение и так пока есть слова
1
qwer_11
2 / 2 / 0
Регистрация: 30.10.2011
Сообщений: 16
21.11.2011, 14:35  [ТС] #3
а что это за лексикографический порядок?
0
lavan
53 / 53 / 1
Регистрация: 21.03.2009
Сообщений: 371
21.11.2011, 14:40 #4
в порядке расположения букв в алфавите
абвг
0
qwer_11
2 / 2 / 0
Регистрация: 30.10.2011
Сообщений: 16
21.11.2011, 19:19  [ТС] #5
а не подскажет как реализовать этот лексикографический порядок??
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
21.11.2011, 20:42 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include <map>
#include <vector>
 
int main()
{
    const char* filename = "input.txt";
    std::ifstream fin(filename);
 
    if(!fin.is_open())
    {
        std::cout << "can`t open file " << filename << '\n';
        return 0;
    }
 
    std::string word;
    std::map< std::string, std::vector<std::string> > groups;
 
    while(fin >> word)
    {
        std::set<char> char_set(word.begin(), word.end());
        groups[std::string(char_set.begin(), char_set.end())].push_back(word);
    }
 
    fin.close();
 
    for(std::map< std::string, std::vector<std::string> >::iterator it = groups.begin();
        it != groups.end(); ++it)
    {
        std::cout << it->first << ": \n";
        for(size_t i = 0; i < it->second.size(); ++i)
            std::cout << it->second[i] << '\n';
        std::cout << '\n';
    }
 
    std::cout << "count: " << groups.size() << '\n';
 
    return 0;
}
1
qwer_11
2 / 2 / 0
Регистрация: 30.10.2011
Сообщений: 16
23.11.2011, 15:13  [ТС] #7
Цитата Сообщение от rangerx Посмотреть сообщение
C++
1
2
3
4
5
6
7
    while(fin >> word)
    {
        std::set<char> char_set(word.begin(), word.end());
        groups[std::string(char_set.begin(), char_set.end())].push_back(word);
    }
 
    fin.close();
если я правильно понял, то этот цикл загонят в конструктор слова из файла??
Цитата Сообщение от rangerx Посмотреть сообщение
C++
1
2
3
4
    for(std::map< std::string, std::vector<std::string> >::iterator it = groups.begin();
        it != groups.end(); ++it)
    {
        std::cout << it->first << ": \n";
а на что этот указатель??
Цитата Сообщение от rangerx Посмотреть сообщение
C++
1
2
        for(size_t i = 0; i < it->second.size(); ++i)
            std::cout << it->second[i] << '\n';
а здесь что такое second.size
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
23.11.2011, 19:54 #8
Цитата Сообщение от qwer_11 Посмотреть сообщение
если я правильно понял, то этот цикл загонят в конструктор слова из файла??
Думаю проще будет объяснить всё с самого начала
C++
1
std::map< std::string, std::vector<std::string> > groups;
Это ассоциативный массив, каждым элементом(значением) которого является набор слов(динамический массив строк std::vector<std::string>), а индексом(ключём) группа символов(str::string), к которой этот набор слов относится.
C++
1
while(fin >> word)
Начинаем последовательно считывать слова в строковую переменую word.
C++
1
2
// std::set это контейнер, который хранит отсортированный набор элементов заданного типа без повторений. 
std::set<char> char_set(word.begin(), word.end());
Помещаем в множество char_set символы из строки word. Тем самым получаем имя группы, в которую входит текущее слово.
C++
1
std::string(char_set.begin(), char_set.end())
Из множества символов контейнера char_set "на лету" создаём строку(имя группы) и передаём её в качестве индекса(ключа) ассоциативному массиву(если такого элемента нет, то он будет создан)
C++
1
groups[std::string(char_set.begin(), char_set.end())]
Значением этого элемента массива будет динамический массив строк(std::vector<std::string>) соответствующий указанной в качестве индекса массива группе символов.
C++
1
.push_back(word)
помещает в этот массив текущее слово.
Цитата Сообщение от qwer_11 Посмотреть сообщение
а на что этот указатель??
std::map это бинарное дерево, в котором пара ключ-значение хранится в виде стандартной шаблонной структуры std::pair из заголовочного файла <utility>. Поля этой структуры имеют имена first и second. it это указатель(итератор) на текущую пару ассоциативного массива. Поле first соответствует ключу, а second значению. Другими слововами, it->first это имя группы, а it->second набор слов(std::vector<std::string>).
Цитата Сообщение от qwer_11 Посмотреть сообщение
а здесь что такое second.size
Получение размера текущего массива.
1
23.11.2011, 19:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 19:54
Привет! Вот еще темы с ответами:

Задача по контейнерам stl vector и list - C++
Дан сортированный по убыванию массив int'ов размером 100 элементов. Значение начального максимального элемента a, минимального b. На вход...

Задача по STL (В строке текста, все числа, встречающиеся перевернуть, оставив на месте) - C++
В строке текста, все числа, встречающиеся перевернуть, оставив на месте.

Задача по STL (Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип char) - C++
Помогите,пожалуйста, заранее спасибо)) Вот задание: 1. Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип...

Задача с файлами в с++ - C++
Ребята помогите решить задачу :( Вроде все правильно, но в самом конце не выводит данные из файла &quot;File 1&quot; а из файла 2 выводит. Где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru