Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Dgaizer
41 / 41 / 5
Регистрация: 25.03.2014
Сообщений: 361
#1

Работа с файлами и массивом

18.12.2014, 23:51. Просмотров 888. Ответов 11
Метки нет (Все метки)

Помогите как занести в массив map<string,string>baza; сначало с 1 файла в 1 <string>названия машин потом со 2 файла 2 <string> значения что то не получается ругается на // [C++ Error] Unit1.cpp(25): E2096 Illegal structure operation
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
#include <vcl.h>
 
#include <iostream.h>
#include <string.h>
#include <map>
#include <fstream.h>
#include <iomanip.h>
#include <windows.h>
using namespace std;
 
int main()
    {
    setlocale(LC_ALL,"rus");
    map<string,string>baza;
    ifstream in_marki("marki.txt");
    string marka;
    while(in_marki>>marka)
    {
    baza[marka]++;// вот тут ругается что не так делаю??????
    }
    ifstream in("rezultat.txt");
    if(!in)
        {
        cerr<<"Error can't open file rezultat.txt";
        return 1;
        }
    ifstream in_bd("bd.txt");
    if(!in_bd)
        {
        cerr<<"Error can't open file bd.txt";
        return 1;
        }
 
    string temp;
    
    for( marka="MAZDA";getline(in_bd,temp);marka++)
        baza[marka]=temp;
 
        
 
    while(getline(in,temp))
    {
    for(map<string,string>::iterator  marka=baza.begin();marka!=baza.end();marka++)
        {
        int count=0;
        for(size_t j=0;j<(marka->second.size());j++)
            {
            if(marka->second[j]==temp[j])
                count++;
            }
        cout<<"Ваши ответы "<<temp<<" Г± "<<marka->first<<
            " с показателями\n\t "<<marka->second<<
            " составляют "<<((double)(count)/marka->second.size())<<endl;
 
        }
    cout<<endl;
    }
     system("pause");
    return 0;
    }

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2014, 23:51
Ответы с готовыми решениями:

Работа с массивом
Задан целочисленный массив Х из 20 элементов, среди которых есть повторяющиеся....

Работа с массивом в СИ++
Нужно написать программу по вычислению массива(в функции). Сначала полученный...

Работа с массивом строк
Добрый день, есть такая простая задача. 3 корзинки . в одной яблоко ,слива и...

Работа с массивом поэлементно
Здравствуйте. Я хочу перевести с языка MQL4 в С++ такое действие с массивом....

Работа с динамическим массивом
Дано: динамический двумерный массив. Определить сумму всех элементов (с...

11
uglyPinokkio
326 / 229 / 55
Регистрация: 30.05.2014
Сообщений: 682
19.12.2014, 06:37 #2
Цитата Сообщение от Dgaizer Посмотреть сообщение
// вот тут ругается что не так делаю??????
А как по твоему должен выглядеть инкремент строки?
1
Dgaizer
41 / 41 / 5
Регистрация: 25.03.2014
Сообщений: 361
19.12.2014, 10:24  [ТС] #3
uglyPinokkio, почти получилось но он только 1 значение выдает а должен 9
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
#include <vcl.h>
#include <iostream.h>
#include <string.h>
#include <map>
#include <fstream.h>
#include <iomanip.h>
#include "windows.h"
using namespace std;
 
int main()
    {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL,"rus");
    map<string,string>baza;
 
    ifstream in("rezultat.txt");
    if(!in)
        {
        cerr<<"Error can't open file rezultat.txt";
        return 1;
        }
    ifstream in_bd("bd.txt");
    if(!in_bd)
        {
        cerr<<"Error can't open file bd.txt";
        return 1;
        }
    ifstream in_marki("marki.txt");
    string pepm;
    string temp;
    for(int k=0;getline(in_marki,pepm);k++) //вот тут полюбому косяк наверно??? в циклах
    for(int i=0;getline(in_bd,temp);i++)
        baza[pepm]=temp;
 
 
 
    while(getline(in,temp))
    {
    for(map<string,string>::iterator  i=baza.begin();i!=baza.end();i++)
        {
        int count=0;
        for(size_t j=0;j<(i->second.size());j++)
            {
            if(i->second[j]==temp[j])
                count++;
            }
        cout<<"Ваши ответы "<<temp<<" с "<<i->first<<
            " вариантом\n\t "<<i->second<<
            "состовляет "<<((double)(count)/i->second.size())<<endl;
 
        }
    cout<<endl;
    }
     system("pause");
    return 0;
    }
0
Миниатюры
Работа с файлами и массивом  
uglyPinokkio
326 / 229 / 55
Регистрация: 30.05.2014
Сообщений: 682
19.12.2014, 10:55 #4
Цитата Сообщение от Dgaizer Посмотреть сообщение
//вот тут полюбому косяк наверно??? в циклах
ХЗ. Но скорее всего после первой итерации внешнего цикла поток in_bd будет в конце файла и на следующих ничего не прочитает.
0
Dgaizer
41 / 41 / 5
Регистрация: 25.03.2014
Сообщений: 361
19.12.2014, 10:58  [ТС] #5
uglyPinokkio, вы не понятным языком мне обьясняете
0
uglyPinokkio
326 / 229 / 55
Регистрация: 30.05.2014
Сообщений: 682
19.12.2014, 11:06 #6
Цитата Сообщение от Dgaizer Посмотреть сообщение
вы не понятным языком мне обьясняете
Я не объясняю. Я говорю.
На первом проходе внешнего цикла внутренний прочитает весь файл. Зачем так - без понятия. Что должен делать этот код тоже не понятно.
0
Dgaizer
41 / 41 / 5
Регистрация: 25.03.2014
Сообщений: 361
19.12.2014, 11:09  [ТС] #7
uglyPinokkio, в общем есть 3 файла в ключ массива должны записаться названия машин, 2 файл это характеристики этих машин записываются в данные, 3 файл это ответы пользователя какую машину он хочет когда все записалось, 3 файл сравнивается с значениями массива отношения 3 файла 1 строки к массиву как то так
Должно быть как на картинке только за место 0 1 2 3 должны названия машин быть
0
Миниатюры
Работа с файлами и массивом  
S_el
2134 / 1662 / 354
Регистрация: 15.12.2013
Сообщений: 6,603
19.12.2014, 20:52 #8
Лучший ответ Сообщение было отмечено Dgaizer как решение

Решение

Dgaizer, было бы неплохо прикрепить файл с марками

А так переделал,в роли ключей выступают марки:

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
#include <iostream>
#include <string>
#include <map>
#include <fstream>
#include <iomanip>
using namespace std;
 
int main()
    {  
    setlocale(LC_ALL,"rus");
    map<string,string>baza;
    
    ifstream in("rezultat.txt");
    if(!in)
        {
        cerr<<"Error can't open file rezultat.txt";
        return 1;
        }
    ifstream in_bd("bd.txt");
    if(!in_bd)
        {
        cerr<<"Error can't open file bd.txt";
        return 1;
        }
    ifstream in_mark("marka.txt");
    if(!in_mark)
        {
        cerr<<"Error can't open file marka.txt";
        return 1;
        }
        
    string temp;
    string mark;
    while(getline(in_mark,mark))
        {
        if(getline(in_bd,temp))
        baza[mark]=temp;
        else break;
        }
    for(size_t count=0;getline(in,temp);count++)
    {
    for(map<string,string>::iterator  i=baza.begin();i!=baza.end();i++)
        {
        for(size_t j=0;j<(i->second.size());j++)
            {
            if(i->second[j]==temp[j])
                count++;
            }
        
        cout<<"Соответствие варианта "<<temp<<" с вариантом "<<i->first<<
            " с показателями\n\t "<<i->second<<
            " составляет "<<((double)(count)/i->second.size())<<endl;
        }
    cout<<endl;
    }
 
    return 0;
    }
1
Dgaizer
41 / 41 / 5
Регистрация: 25.03.2014
Сообщений: 361
19.12.2014, 23:06  [ТС] #9
S_el, спасибо большое
0
Dgaizer
41 / 41 / 5
Регистрация: 25.03.2014
Сообщений: 361
20.12.2014, 00:48  [ТС] #10
S_el, вот файл только он как то странно считает
300% это слишком и 122 перебор
0
Миниатюры
Работа с файлами и массивом  
Вложения
Тип файла: txt marki.txt (67 байт, 5 просмотров)
S_el
2134 / 1662 / 354
Регистрация: 15.12.2013
Сообщений: 6,603
20.12.2014, 01:38 #11
Цитата Сообщение от Dgaizer Посмотреть сообщение
вот файл только он как то странно считает
300% это слишком и 122 перебор
А в старой версии считало нормально?

Добавлено через 44 минуты
Dgaizer, да,глупая ошибка.
В 40 строчке замените for на while.
А count возьмите из предыдущей версии.
1
Dgaizer
41 / 41 / 5
Регистрация: 25.03.2014
Сообщений: 361
20.12.2014, 14:09  [ТС] #12
S_el, все заменил отлично работает спасибо еще раз
0
20.12.2014, 14:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2014, 14:09

Работа с текстовым массивом
Помогите пожалуйста с задачкой: в текстовом массиве содержащим произвольное...

Работа с массивом! Сдвиг
Есть массив с n-ным колличеством элементов. Нужно сдвинуть значение каждого...

Работа с массивом указателей
#include &lt;iostream&gt; using namespace std; int main() { const int...


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

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

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