Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.11.2022
Сообщений: 8

Ассоциативные контейнеры

07.11.2023, 16:20. Показов 892. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание: В файле фамилия имя отчество ученика и оценки по предметам вывести по ключу(фио)
количество долгов и название предметов.
У Вас должен быть текстовый файл, в котором хранятся данные.

Запрос пользователя вводится в консоли.

После выполнения программы, выдается запрос нужно ли сохранить файл.

В конце пользователю предлагается выйти из программы или повторить запрос.

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

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
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <sstream>
 
// Функция для разбиения строки на подстроки по заданному разделителю
std::vector<std::string> split(const std::string& str, char delimiter) {
    std::vector<std::string> tokens;
    std::string token;
    std::istringstream tokenStream(str);
    while (std::getline(tokenStream, token, delimiter)) {
        tokens.push_back(token);
    }
    return tokens;
}
 
int main() {
    std::map<std::string, std::vector<std::pair<std::string, int>>> data;
 
    std::ifstream file("students.txt"); // Замените "data.txt" на имя вашего файла
    std::string line;
    std::string currentName;
    while (std::getline(file, line)) {
        if (line.empty()) {
            continue;
        }
        // Если строка содержит ФИО, то создаем новую запись в std::map
        if (line.find(' ') != std::string::npos) {
            currentName = line;
            data[currentName] = std::vector<std::pair<std::string, int>>();
        } else {
            // Если строка содержит название предмета и оценку, добавляем их в текущую запись
            std::vector<std::string> tokens = split(line, ':');
            std::string subject = tokens[0];
            int grade = std::stoi(tokens[1]);
            data[currentName].push_back(std::make_pair(subject, grade));
        }
    }
 
    // Запрашиваем ФИО у пользователя
    std::cout << "Введите ФИО ученика: ";
    std::string searchName;
    std::getline(std::cin, searchName);
 
    // Ищем данные по заданному ФИО
    auto it = data.find(searchName);
    if (it != data.end()) {
        int numFails = 0;
        std::vector<std::string> subjects;
        for (const auto& pair : it->second) {
            if (pair.second < 3) {
                numFails++;
                subjects.push_back(pair.first);
            }
        }
 
        // Выводим результаты
        std::cout << "Количество долгов: " << numFails << std::endl;
        std::cout << "Название предметов с оценкой ниже 3: ";
        for (const auto& subject : subjects) {
            std::cout << subject << " ";
        }
        std::cout << std::endl;
    } else {
        std::cout << "Данные для заданного ФИО не найдены." << std::endl;
    }
 
    // Предложение сохранить файл
    char saveChoice;
    std::cout << "Хотите сохранить файл (Y/N)? ";
    std::cin >> saveChoice;
 
    if (saveChoice == 'Y' || saveChoice == 'y') {
        // Код для сохранения файла здесь
    }
 
    return 0;
}
Файл students.txt:
Иванов Иван Иванович 5 Математика 4 Физика 3
Петров Петр Петрович 3 Математика 4 Английский 2 История 3
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2023, 16:20
Ответы с готовыми решениями:

Ассоциативные контейнеры
У Вас должен быть текстовый файл, в котором хранятся данные. Запрос пользователя вводится в консоли. После выполнения программы,...

[C++11] STL unordered контейнеры
Думаю, проще всего мою проблему/задачу описать псевдокодом. class MyClass { void Something() { ...

Ассоциативные контейнеры
В текстовом файле хранятся слова: - вывести список различных слов (set); - подсчитать количество вхождений каждого слова...

1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
07.11.2023, 20:48
В примере нет двоеточий, но ты их ищешь. И зачем эта проверка на пробел, если он в любой строке есть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2023, 20:48
Помогаю со студенческими работами здесь

Ассоциативные контейнеры
Добрый вечер! Прошу прощения за глупей вопрос, но совсем не понимаю, как это сделать. Создать простой класс Complex, содержащий:...

Ассоциативные контейнеры
Помогите, пожалуйста. Создать ассоциативный контейнер. Заполнить его элементами стандартного типа (тип указан в варианте). Добавить...

Ассоциативные контейнеры STL
Везде сказано: set - упорядоченное множество уникальных элементов. (есть куча примеров и уроков) multiset - то же что и set, но...

C++. STL. Ассоциативные контейнеры
Здравствуйте, уважаемые! Решить задачу, используя либо множество set либо отображение map. Имеется список из элементов структуры ...

Ассоциативные контейнеры(алгоритмы)с++
Создать vector&lt;int&gt;, считать в него список чисел из текстового файла. Выполнить, не используя циклов: поиск наибольшего значения; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru