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

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

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

Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> - C++

09.03.2016, 20:38. Просмотров 242. Ответов 7
Метки нет (Все метки)

Здравствуйте, у меня такой вопрос, например существует контейнер multiset<string>, как можно вывести на экран строки длиной больше 5 и меньше 20?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2016, 20:38     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string>
Посмотрите здесь:

C++ Определить среднюю длину строк в тексте и вывести строки с длиной меньше средней
Даны две строки длиной до 80 символов C++
C++ Дана строка символов, состоящая из цифр и пробелов. Вывести на экран слово с максимальной длиной
C++ Удалить конец строки символов. Ввести кол-во удаляемых символов , вывести результат ,String ,задачка,С++
Вывести строки символов на экран C++
C++ Вывести на консоль те строки, длина которых меньше (больше) средней, а также длину.
C++ В одномерном массиве определить и вывести на экран количество элементов, которые меньше левого, но больше прав
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3523 / 1805 / 477
Регистрация: 18.10.2014
Сообщений: 3,324
10.03.2016, 03:14     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> #2
Пройти по всему контейнеру от начала до конца и вывести на экран строки длиной больше 5 и меньше 20. Тот факт, что это именно 'multiset', никакой роли в данном случае не играет.

Добавлено через 15 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
#include <set>
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
 
using namespace std::placeholders;
 
int main()
{
  std::multiset<std::string> ms = { "am", "continuous", "to", "superconductivity", "supercalifragilisticexpialidocious" };
 
  std::copy_if(ms.begin(), ms.end(), std::ostream_iterator<std::string>(std::cout, " "),
    std::bind(std::logical_and<>(), 
      std::bind(std::less<>(), 5u, std::bind(&std::string::size, _1)),
      std::bind(std::less<>(), std::bind(&std::string::size, _1), 20u)));  
 
  std::cout << std::endl;
}
Usaga
1364 / 1118 / 193
Регистрация: 21.01.2016
Сообщений: 4,060
Завершенные тесты: 2
10.03.2016, 07:02     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> #3
TheCalligrapher, такой хитрый способ проверки условия пришёл из времён, когда ещё не было лямбда-выражений или в этом есть какой-то особый смысл?

Добавлено через 47 секунд
Я имею в виду конструкцию на базе std::bind.
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3523 / 1805 / 477
Регистрация: 18.10.2014
Сообщений: 3,324
10.03.2016, 07:37     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> #4
Цитата Сообщение от Usaga Посмотреть сообщение
или в этом есть какой-то особый смысл
В этом есть какой-то особый смысл: я хотел, чтобы выглядело понавороченнее. Лямбду каждый напишет. А вот многоэтажный std::bind - это настоящий киберпанк!!!11

P.S. В те времена, когда не было лямбд, и std::bind тоже не существовал, а аналоги в std были не такими мощными.
Alex_msk
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 10
10.03.2016, 13:26  [ТС]     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> #5
а по проще нельзя написать ? что делает bind ?
Usaga
1364 / 1118 / 193
Регистрация: 21.01.2016
Сообщений: 4,060
Завершенные тесты: 2
10.03.2016, 13:45     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> #6
Alex_msk, ну можно и так:

C++
1
2
3
4
5
for(std::string str : ms) {
    if (str.size() > 5 && str.size() < 20) {
        std::cout << str << std::endl;
    }
}
Но это уже неинтересно)
Alex_msk
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 10
10.03.2016, 14:15  [ТС]     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> #7
спасибо)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2016, 18:37     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string>
Еще ссылки по теме:

Текст, состоящий не более чем из 255 символов, разбить на строки длиной не более 50 символов в строке C++
C++ Как сравнить две строки string, введенных с клавиатуры, и вывести на экран строку которая больше?
Вывести файл на экран, чтобы в каждой строке было не больше 40 символов, и количество строк было минимальным C++
Вывести на экран только предложения, содержащие двузначные числа (строки: string) C++
C++ Преобразовать строки длиной больше 10 символов

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

Или воспользуйтесь поиском по форуму:
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3523 / 1805 / 477
Регистрация: 18.10.2014
Сообщений: 3,324
10.03.2016, 18:37     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> #8
Цитата Сообщение от Alex_msk Посмотреть сообщение
а по проще нельзя написать ?
А надо ли? Обратите внимание, что в моем варианте задача решается фактически одним выражением, одной строчкой:

C++
1
std::copy_if(ms.begin(), ms.end(), std::ostream_iterator<std::string>(std::cout, " "), std::bind(std::logical_and<>(), std::bind(std::less<>(), 5u, std::bind(&std::string::size, _1)), std::bind(std::less<>(), std::bind(&std::string::size, _1), 20u)));
Куда уж проще...
Yandex
Объявления
10.03.2016, 18:37     Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string>
Ответ Создать тему
Опции темы

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