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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
#1

Задача по теме карта (map) - C++

28.07.2012, 13:44. Просмотров 1393. Ответов 18
Метки нет (Все метки)

Условие:
Дан файл содержащий в каждой строке фамилию отца и имена детей.
Занесите все данные в карту где фамилия является ключом
Выведите имена всех детей в отдельный файл через пробел.
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <sstream>
 
int main()
{
    // карта key - фамилия , value - имена детей
    std::map<std::string, std::vector <std::string> > child;
    // строка для фамилии при считывании из файла
    std::string fam;
    // вектор для имен детей
    std::vector <std::string> name;
 
    // связываем переменную с файлом
    std::ifstream map_zapolnenie;
    map_zapolnenie.open("input.txt");
    // переменная для считывания строки из файла
    //и последующего разбора по словам
    std::string line;
 
    // цикл разбора каждой строки входного файла
    // 1 слово записывается в fam - фамилия
    // все последующие в вектор имен
    while (std::getline(map_zapolnenie, line)) {
        std::istringstream stream(line);
        std::string word;
        stream >> fam;
        while (stream >> word) {
            name.push_back(word);
        }
        // результат записывается в карту
        child.insert(std::make_pair(fam, name));
    }
 
    // связывание переменой и файла вывода
    std::ofstream map_vivod;
    map_vivod.open("outout.txt");
 
    // итератор на начало карты
    std::map< std::string, std::vector<std::string> >::iterator iter=child.begin();
    while (iter != child.end()) {
        // вывод в файл только имен через пробел
        for (std::vector<std::string>::iterator vec=iter->second.begin(); vec != iter->second.end(); vec++) {
            map_vivod << *vec << " ";
        }
        ++iter;
    }
    //закрытие всех файлов
    map_zapolnenie.close();
    map_vivod.close();
 
    return 0;
}
цикл с 27 по 36 строку он почему то перепрыгивает

Входной файл содержит
Иванов Роман Михаил
Петров Алена Ира
Сидоров Галя
Рыбин Олег Костя Игорь
Выходной файл получается таким
Роман Михаил Роман Михаил Алена Ира Роман Михаил Алена Ира Галя Олег Костя Игорь Роман Михаил Алена Ира Галя
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2012, 13:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Задача по теме карта (map) (C++):

Map, карта в карте - C++
У меня возник такой вопрос, хочу сделать map в map, например map &lt; string , map &lt;int ,int &gt;&gt; something как мне получить доступ к второй...

Разработка контейнера типа Карта (Map) - C++
Приветсвую всех форумчан! Имеется задача разработать решение реализующее динамическую структуру данных (контейнер) типа «Карта»(map,...

Задача по теме функции - C++
Мне дали задачу: на языке с++ записать объявления функций, выполняющих заданные действия. Написать функцию main, содержащую примеры...

Задача по теме Двумерные массивы - C++
Помогите выбрать правильный вариант в этой задаче. Заранее спасибо. 1. Задачи необходимо переписывать в текст сообщения. 2. Язык...

задача по теме операторы ветвления, введение в С++ - C++
Пользователь вводит четырехзначное число. Необходимо поменять в этом числе 1 и 2 цифры, а также 3 и 4 цифры. Если пользователь вводит не...

Обращение к элементам vector, который находится в map, находящийся в map - C++
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить его? map &lt;int,map&lt;int,vector&lt;int&gt; &gt;...

18
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
28.07.2012, 17:49 #16
Цитата Сообщение от DaskOFF Посмотреть сообщение
lines - не заполняется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <string>
#include <map>
 
int main()
{
    std::ifstream map_zapolnenie;
    map_zapolnenie.open("input.txt");
 
    std::string line;
 
    std::getline(map_zapolnenie, line);
    
    std::cout << line << "\n";
       
    return 0;
}
Разве так не считывает первую строку?
1
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
28.07.2012, 18:23  [ТС] #17
как ни странно, но нет

Добавлено через 26 минут
неужели никто не знает что может быть?
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2012, 18:32 #18
Цитата Сообщение от DaskOFF Посмотреть сообщение
это сейчас
Усовершенствуйте карту из предыдущей задачи так, чтобы вектор хранил пары, содержащие имя ребенка и день его рождения. Измените проверку так, чтобы она позволяла проверить модернизированную карту
- Лови
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <map>
#include <string>
#include <vector>
#include <utility>
#include <fstream>
#include <sstream>
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");//Руссификация 
    ifstream ifs;//Поток для чтения файла
    ofstream ofs;//Поток для записи файла
    string fam;  //Строка с фамилией
    string name; //Строка с именем
    string date; //Строка с датой
    string line; //Строка с текущей строкой из файла
 
    map<string, vector<pair<string, string>>> mymap;//Наша карта
    map<string, vector<pair<string, string>>>::iterator itMap;//Итератор для карты
    vector <pair<string,string>> vec;//Вектор с именами и датами рождения детей
    vector <pair<string,string>>::iterator itVec; //Итератор для вектора
 
    int iChoise= 0;//Будет отвечать за выбор пользователя
    bool bMenu = true;//флаг для меню вывода
    int nCount = 0;//Будет содержать число результатов удовлетворяющих запросу на поиск
    stringstream ifs_ss;
    ifs.open("input.txt");
    if(!ifs.is_open())
        cout<<"Error open input.txt\n";
    else
    {
        //Цикл чтения
        cout<<"input.txt :\n";
        while(getline(ifs,line))
        {
            ifs_ss.sync();//Обязательно чистим буфер
            ifs_ss.str(line);//Инициализируем стрнгпоток введенной строкой
            ifs_ss>>fam;cout<<fam<<" ";
            while(ifs_ss>>name>>date)
            {
                cout<<name<<" "<<date<<" ";
                vec.push_back(make_pair(name,date));
            }
            mymap.insert(make_pair(fam,vec));
            ifs_ss.clear();
            vec.clear();
            cout<<endl;
        }
        ifs.close();//Закрыли поток чтения
        ofs.open("output.txt");
        if(!ofs.is_open())
            cout<<"Error open output.txt\n";
        else
        {
            cout<<"output.txt :\n";
            while(bMenu)
            {
                cout<<"\t***MENU***\n";
                cout<<"1 - Enter Child name\n";
                cout<<"2 - Enter Child date\n";
                cout<<"0 - Exit\n";
                cout<<"Choise : ";cin>>iChoise;
                cin.sync();//чистим буффер ввода
                nCount = 0;//Обнуляем счётчик поиска
                switch(iChoise)
                {
                    case 1:
                        cout<<"Name : ";
                        getline(cin,name);
                        break;
                    case 2:
                        cout<<"Date : ";
                        getline(cin,date);
                        break;
                    case 0:
                        bMenu = false;
                        break;
                    default:
                        cout<<"Not spported key pressed\n";
                        break;
                }
                for (itMap = mymap.begin(); itMap != mymap.end(); itMap++)
                {
                    vec = (*itMap).second;
                    for(itVec = vec.begin();itVec != vec.end(); itVec++)
                    {
                            
                        if
                        (
                            iChoise == 1 ? (*itVec).first == name : 
                            iChoise == 2 ? (*itVec).second== date :
                            false
                        )
                        {
                            ofs <<(*itVec).first <<" "<<(*itVec).second<<" ";
                            cout<<(*itVec).first <<" "<<(*itVec).second<<" ";
                            nCount++;//Увеличиваем значение счётчика
                        }
                    }
                    vec.clear();
                }
                if((iChoise == 1 || iChoise == 2) && nCount == 0)
                    cout<<"Not found";
                cout<<endl;
            }
            ofs.close();
        }
    }
    system("pause");
    return 0;
}
В аттаче проект, экзешник и вход/выход файлы
1
Миниатюры
Задача по теме карта (map)  
Вложения
Тип файла: rar stdMap3.exe.rar (74.4 Кб, 3 просмотров)
Тип файла: rar stdMap3_VS9.0_proj.rar (4.9 Кб, 2 просмотров)
Тип файла: txt input.txt (105 байт, 3 просмотров)
Тип файла: txt output.txt (33 байт, 3 просмотров)
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 1
28.07.2012, 19:06  [ТС] #19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- Лови

В аттаче проект, экзешник и вход/выход файлы
спасибо, ща разберу что еще не знаю,
кстати нашел ответ на вопрос почему у меня обходил цикл.

Когда пошагово смотрел файл проверялся в другой папке
Лежал тут(где создается exe-шник программы) : D:\Developer\проекты C++\Second\Debug

а проверялся тут: D:\Developer\проекты C++\Second\Second

Но все равно спасибо, всем кто отозвался, программки разберу, посмотрю что не знаю
1
28.07.2012, 19:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2012, 19:06
Привет! Вот еще темы с ответами:

Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std::map? - C++
Здравствуйте. Возможно ли создать контейнер std::map, в котором в качестве значения была бы ссылка на std map? Например: std::map...

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ? - C++
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа Ivanov potato 200) Использовать именно map&lt;string,...

Как вставить map в map - C++
есть такой map map &lt; INT64 , map &lt;INT64 , map&lt; wArray , int &gt; &gt; &gt; tMenu; как его заполнить? пробовал так ...

Задача по теме "Кондитерские изделия", классы - C++
Я просто долгое время болел и пропустил тему связанную с классами, а завтра уже надо сдать готовую программу, ребят, помогите...


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

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

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