Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 28.05.2022
Сообщений: 55

Объясните, пожалуйста, как работает данный код

20.11.2022, 19:10. Показов 583. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я С++ не изучаю но мне нужно понять что в этом коде вообще происходит. Некоторые строчки которые понял я закомментировал, обясните оставшиеся строки. Это код для чтение и вывода дат в текстовом файле. Заранее большое спасибо !
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
using namespace std;
int main()
{
    setlocale(LC_ALL, "Rus");
    ifstream ff("file1.txt", ios::binary);
    if (ff)
    {
        map<string, int> res;
        string t;
        while (getline(ff, t, '.')) // читаем текст до точки
        {
            res[t]++; // заносим в res и считаем к-во повторений
            char c;
            while ((c = ff.get()) && c != EOF && !isdigit(c)); 
            ff.putback(c);
        }
        ff.close();
        map<string, int>::iterator p = res.begin(), pmax;
        pmax = p;
        for (; p != res.end(); ++p) 
        {
            if (p->second > pmax->second) // поиск наибольшего к-ва повторений
                pmax = p;
            cout << p->second << '-' << p->first << endl; // вывод содержимого res
        }
        cout << "Максимальное число повторений="
            << pmax->second << '(' << pmax->first << ')' << endl;
    }
    else
        cout << "Файл не открылся\n";
    cin.get();
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2022, 19:10
Ответы с готовыми решениями:

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

Объясните как работает данный код
int main() { setlocale(LC_ALL, &quot;ru&quot;); int n, m, S, tmp, a; S = 0; cout &lt;&lt; &quot;Количество элементов массива не превышающее...

Объясните, пожалуйста, данный код
Здравствуйте, объясните пожалуйста построчно данный код. Задача: В одномерном массиве исключить все вхождения заданного числа. Массив...

12
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
20.11.2022, 19:20
Цитата Сообщение от Romanwww Посмотреть сообщение
что в этом коде вообще происходит
Цитата Сообщение от Romanwww Посмотреть сообщение
// вывод содержимого res }
в этом коде происходит некомпиляция.

Добавлено через 57 секунд
Цитата Сообщение от Romanwww Посмотреть сообщение
ios::binary)
Цитата Сообщение от Romanwww Посмотреть сообщение
getline
0_о

Добавлено через 5 минут
Эт короч хрень и не работает.
0
0 / 0 / 0
Регистрация: 28.05.2022
Сообщений: 55
20.11.2022, 19:27  [ТС]
У меня оно компилируется, просто вы должны создать текстовый файл file1.txt в корневой папке проекта
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
20.11.2022, 19:32
Цитата Сообщение от Romanwww Посмотреть сообщение
просто вы должны
Да-да-да.
Чо он от пустого файла ломается-то?
0
0 / 0 / 0
Регистрация: 28.05.2022
Сообщений: 55
20.11.2022, 19:44  [ТС]
Только что попробовал запустить с пустым файлом, действительно ломается, но если в файл написать даты типо "16 September 2000. 16 September 2000. September 16 2017. 16 September 2404.
(16 September 2000.)
(16 September 2000.)
(16 September 2000.)"
То он отлично справляется с работой. Попробуйте добавить библиотеки
#include <string>
#include<map>
#include <clocale>
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
20.11.2022, 19:51
Цитата Сообщение от Romanwww Посмотреть сообщение
действительно ломается
Знач не работает.
Цитата Сообщение от Romanwww Посмотреть сообщение
Попробуйте добавить библиотеки
#include <string>
#include<map>
#include <clocale>
C++
1
2
#include <iostream>
#include <fstream>
Забыл.

Цитата Сообщение от Romanwww Посмотреть сообщение
но если в файл написать даты типо
От оно "типо" видимо должно считать повторяющиеся даты тогда.
0
0 / 0 / 0
Регистрация: 28.05.2022
Сообщений: 55
20.11.2022, 20:01  [ТС]
Хорошо, вы сможете мне описать комментариями что происходит в каждой строке кода. Буду благодарен
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,217
20.11.2022, 21:35
Цитата Сообщение от Romanwww Посмотреть сообщение
C++
1
2
 char c;
 while ((c = ff.get()) && c != EOF && !isdigit(c));
Использование переменой типа char для получения результата get().
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
21.11.2022, 01:08
Цитата Сообщение от Romanwww Посмотреть сообщение
вы сможете~ ~кода.
Это утверждение?
Да и, короч, не хочу. Мутный кот с помойки.
0
Модератор
Эксперт С++
 Аватар для zss
13772 / 10965 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
21.11.2022, 09:07
Цитата Сообщение от Romanwww Посмотреть сообщение
res[t]++; // заносим в res и считаем к-во повторений
Цитата Сообщение от Romanwww Посмотреть сообщение
if (p->second > pmax->second) // поиск наибольшего к-ва повторений
На мой взгляд, этих двух комментариев достаточно.
В ассоциативный контейнер res записываются считанные строки и к-во их повторений.
Далее делается проход по контейнеру и находится строка с наибольшим количеством повторений.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
21.11.2022, 09:21
Цитата Сообщение от Romanwww Посмотреть сообщение
У меня оно компилируется
Я таки думаю, что вы обманываете.
В коде 4 открывающие скобки { и только 2 закрывающие }
Как же это может компилироваться?

Остаётся гадать по отступам.

А так - не совсем понятно зачем вам построчно разбирать-то? выводит что надо - да и хорошо
Если какие-то строки особенно не понятны - напишите, какие?
0
0 / 0 / 0
Регистрация: 28.05.2022
Сообщений: 55
22.11.2022, 11:28  [ТС]
Хорошо, спасибо за помощь, мне не понятны 8-я, 14, 18 и 20 строки. Спасибо !
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
22.11.2022, 11:39
Лучший ответ Сообщение было отмечено Romanwww как решение

Решение

Цитата Сообщение от Romanwww Посмотреть сообщение
map<string, int> res;
Объявляется мапа (словарь типа "ключ->значение").
Ключ в ней - строка, значение - целое.

Цитата Сообщение от Romanwww Посмотреть сообщение
while ((c = ff.get()) && c != EOF && !isdigit(c));
Читаем последовательно символы из входного потока. Читаем до тех пор, пока не дошли до конца или пока встречаются не цифры.
Как только будет конец (файла) или будет прочитан символ "цифра" - перейдём к следующей строке.

Цитата Сообщение от Romanwww Посмотреть сообщение
map<string, int>::iterator p = res.begin(), pmax;
Объявили итераторы ("указатели") на элементы мапы из строки 8.
p будет указывать на первый элемент мапы, pmax ока не инициализирован, позже в нем сохраняется указатель на элемент мапы с макс. значением.

Цитата Сообщение от Romanwww Посмотреть сообщение
for (; p != res.end(); ++p)
Цикл перебираем последовательно элементы мапы.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2022, 11:39
Помогаю со студенческими работами здесь

Объясните пожалуйста, как работает код
#include &lt;iostream&gt; using namespace std; int f(int x) { if (x &lt; 3) return 0; if (x == 3) return 1; ...

Объясните пожалуйста, как работает код. Указатели
Если не сложно, напишите пожалуйста комметнтарии к каждой строке. Никак не могу разобраться. Программа разделяет строку на слова. ...

Объясните пожалуйста, как конкретно работает код
Программа считывает из файла фамилии, имена, годы рождения и балы студентов, и записывает в другой файл фамилии, начинающейся с букв А и Б...

Объясните, пожалуйста что за код и какие в нем ошибки. Ни один из них не работает
//------------------------------------------------------------------------------ // Сортировка методом простых вставок на основе...

Объясните пожалуйста как работает программа!!
#include&lt;iostream&gt; #include&lt;cstdlib&gt; using namespace std; int *Create(int n) { if(n&lt;=10000) { int *arr; arr...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru