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

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

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

Не выводится значение multimap по ключу - C++

18.11.2015, 21:20. Просмотров 315. Ответов 0

Здравствуйте!
Я считываю строки из файла base.xml и записываю их в multimap в виде пары (soname, article). //теги из xml-файла
После считывания выводится вся информация без тегов, но при попытке намеренно вывести значение по ключу ничего не происходит. Подскажите, пожалуйста, почему так?
Еще есть проблема с открытием xml-файла в браузере, когда текст, заключенный в тегах, написан на русском языке. Как это исправить?
Заранее спасибо!

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
#include <iostream>
#include <fstream>
#include <map>
#include <list>
 
using namespace std;
typedef multimap<string, string> StrStrMMap;
 
//обработка считанной строки в тегах soname
string handling_string_soname (string s)
{
    s.erase(0, 8);
    s.erase(s.size() - 10, 9);
    return s;
}
 
//обработка считанной строки в тегах article
string handling_string_article (string s)
{
    s.erase(0, 9);
    s.erase(s.size() - 11, 10);
    return s;
}
 
int main()
{
    ifstream my_base("base.xml");
    multimap<string, string> homo_homo_sapiens;
 
    StrStrMMap::iterator iter;
 
    string homo_end = "</homo";
    string homo_sapiens_beg = "<homo_";
    string article_beg = "<artic";
 
    unsigned long int pos = 0;
    string name_of_homo_sapiens;
 
    string s;           //считанная строка
    string subs;      //получение подстроки из s
    string new_s;   //очистка s от атрибутов
 
    while(getline(my_base, s))// пока не достигнут конец файла, помещать очередную строку в переменную s
    {
        subs = s.substr(0, 6);
        
        if (subs == homo_sapiens_beg)
        {
            getline(my_base, s);//<soname>...</soname>
            new_s=handling_string_soname(s);
            name_of_homo_sapiens = new_s;
 
            while(subs != homo_end)//subs == article_beg
            {
                getline(my_base, s);//<article>...</article>
                subs = s.substr(0, 6);
                if(subs == article_beg)
                {
                    new_s=handling_string_article(s);
                    //добавление нового значения к текущему ключу
                    homo_homo_sapiens.insert(make_pair(name_of_homo_sapiens, new_s));
                }
                else
                {
                    break;
                }
            }
            //вывод всех значений
            for (iter = homo_homo_sapiens.lower_bound(name_of_homo_sapiens); iter != homo_homo_sapiens.upper_bound(name_of_homo_sapiens); iter++)
            {
                cout << iter->second << endl;
            }
            cout << endl;
        }
    }
    
    //здесь не выводит по ключу
    name_of_homo_sapiens="Ivanov";
    cout << "\n\n";
    for (iter = homo_homo_sapiens.lower_bound(name_of_homo_sapiens); iter != homo_homo_sapiens.upper_bound(name_of_homo_sapiens); iter++)
    {
        cout << iter->second << endl;
    }
 
    my_base.close(); //закрыть файл
    return 0;
}
xml-файл:
Кликните здесь для просмотра всего текста

<?xml version="1.0"?>
<homo>
<homo_sapiens>
<soname>Ivanov</soname>
<article>Influence furry seals on the stress tolerance of students in the session.</article>
<article>Peter Dreaming.</article>
<article>The moon is an old abandoned alien ship.</article>
</homo_sapiens>
<homo_sapiens>
<soname>Petrov</soname>
<article>Einstein's theory refuted! Say "NO" synchrotron!</article>
<article>Telegonia real! Interviews of the researcher and the sorcerer of the village Novostarovo.</article>
</homo_sapiens>
<homo_sapiens>
<soname>Sidorov</soname>
<article>Philip has Foie Gras! Pictures from the scene.</article>
<article>Peter Bentley again got drunk in a nightclub.</article>
<article>Nastya Ferrari shares fashion tips. Which shoes are not ashamed to go out in the new season.</article>
<article>Dominique Joker opened a beauty salon! Interviews from the solarium.</article>
</homo_sapiens>
</homo>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2015, 21:20     Не выводится значение multimap по ключу
Посмотрите здесь:
C++ Доступ к элементам multimap по ключу
Multimap. Как получить кол-во элементов по ключу? C++
Multimap. Ошибка operator+ not implemented in type multimap C++
Отсортировать массив пар ключ-значение по ключу C++
Не выводится значение из подфункции C++
Не выводится значение интеграла C++
C++ Выводится значение предыдущей операции
C++ Непонятно выводится значение числа типа double
Выводится случайное значение переменной у при х=-3. Что делать? C++
C++ multimap
Ошибка с multimap C++
C++ multimap::emplace()

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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