powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывести на экран строки длиной больше 10 и меньше 50 символов из контейнера multiset
2 сообщений из 2, страница 1 из 1
Вывести на экран строки длиной больше 10 и меньше 50 символов из контейнера multiset
    #40024738
blkvnkl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть код программы, только в нём используется контейнер multimap, и строки с длиной больше 11 и меньше 20. В файл должны быть записаны только строки длиной больше 10 и меньше 50 символов. Использовать контейнер multiset<std::string, Compare>. Входной файл существует на диске, выходной файл создается программой.

Задача данной программы - вывод строк где больше 10 символов и меньше 20. Сейчас программа работает с контейнером multimap. Нужно чтобы программа работала с контейнером multiset и выводила строки где больше 10 символов и меньше 50, и чтобы эти строки были упорядочены по длине.
Код: plaintext
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.
#include <stdio.h>
#include <iostream>
#include <map>
#include <exception>
#include <stdexcept>
 
int main() {
    try {
        FILE* filein;
        FILE* fileout;
        /*char name[256];
        std::cout << "Enter the opening file's path:" << std::endl;
        std::cin >> name;*/
        /*char nameout[256];
        std::cout << "Enter the saving file's path:" << std::endl;
        std::cin >> nameout;*/
        char name[] = "test1.txt";
        char nameout[] = "resout.txt";
        if ((filein = fopen(name, "r")) == NULL)
            throw std::runtime_error("Can't open the file.");
        if ((fileout = fopen(nameout, "w")) == NULL) {
            fclose(filein);
            throw std::runtime_error("Can't create the file.");
        }
        std::multimap<int, int, std::greater <int>> myMap; //создание контейнера
        char str[1024];
        int len;
        int pos;
        std::string s;
        bool counter = 0;
        while (!feof(filein)) {
            if (fgets(str, 1024, filein)) {
                std::cout << str;
                s = str;
                len = s.length();
                pos = ftell(filein);
                if (len >= 11 && len <= 21)
                    counter++;
                myMap.insert(std::make_pair(len, pos - 1)); //заполнение контейнера
            }
        }
        if (counter == 0) {
            std::cout << '\n';
            fclose(filein);
            fclose(fileout);
            throw std::runtime_error("Required strings are missing.");
        }
        std::cout << std::endl;
        std::multimap<int, int>::iterator it; //объявление итератора
        std::cout << "result:" << std::endl;
        std::multimap<int, int>::iterator itlow, itup; //границы контейнера
        itlow = myMap.lower_bound(21);
        itup = myMap.upper_bound(11);               
        for (it = itlow; it != itup; ++it)
        {
            if ((it == myMap.end()) && (it->first >= 11) && (it->first <= 21)) //без доп условия последняя строка не выводится корректно
            {
                fseek(filein, it->second - it->first + 1, SEEK_SET);
                fgets(str, it->first + 1, filein);
            }
            else
            {
                fseek(filein, it->second - it->first, SEEK_SET);
                fgets(str, it->first, filein);
            }
            fputs(str, fileout);
            fputs("\n", fileout);
            //std::cout << it->first << "=" << it->second << std::endl;
            std::cout << str << std::endl;
        }
        fclose(filein);
        fclose(fileout);
    }
    catch (std::exception& exception)
    {   
        std::cerr << "Standard exception: " << exception.what() << std::endl;
    }
}
...
Рейтинг: 0 / 0
Вывести на экран строки длиной больше 10 и меньше 50 символов из контейнера multiset
    #40024744
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вывести на экран строки длиной больше 10 и меньше 50 символов из контейнера multiset
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]