Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Alex_msk
0 / 0 / 1
Регистрация: 09.03.2016
Сообщений: 10
#1

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

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

Здравствуйте, у меня такой вопрос, например существует контейнер multiset<string>, как можно вывести на экран строки длиной больше 5 и меньше 20?
http://www.cyberforum.ru/cpp-beginners/thread1866078.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2016, 20:38
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывести на экран строки длиной больше 5 и меньше 20 символов из контейнера multiset<string> (C++):

Как сравнить две строки string, введенных с клавиатуры, и вывести на экран строку которая больше?
Как сравнить две строки string введенных с клавиатуры и вывести на экран строку...

Определить среднюю длину строк в тексте и вывести строки с длиной меньше средней
определить среднюю длину строк и вывестис длиной меньше средней я даже...

Дана строка символов, состоящая из цифр и пробелов. Вывести на экран слово с максимальной длиной
Помогите, выдает ошибку в проверке условия цикла #include &lt;conio.h&gt;...

Удалить конец строки символов. Ввести кол-во удаляемых символов , вывести результат ,String ,задачка,С++
Удалить конец строки символов. Ввести количество удаляемых символов , вывести...

В одномерном массиве определить и вывести на экран количество элементов, которые меньше левого, но больше прав
В одномерном массиве определите и выведите на экран количество элементов,...

7
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4371 / 2346 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
10.03.2016, 03:14 #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;
}
1
Usaga
Эксперт .NET
3695 / 2997 / 543
Регистрация: 21.01.2016
Сообщений: 11,849
Завершенные тесты: 2
10.03.2016, 07:02 #3
TheCalligrapher, такой хитрый способ проверки условия пришёл из времён, когда ещё не было лямбда-выражений или в этом есть какой-то особый смысл?

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

P.S. В те времена, когда не было лямбд, и std::bind тоже не существовал, а аналоги в std были не такими мощными.
2
Alex_msk
0 / 0 / 1
Регистрация: 09.03.2016
Сообщений: 10
10.03.2016, 13:26  [ТС] #5
а по проще нельзя написать ? что делает bind ?
0
Usaga
Эксперт .NET
3695 / 2997 / 543
Регистрация: 21.01.2016
Сообщений: 11,849
Завершенные тесты: 2
10.03.2016, 13:45 #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;
    }
}
Но это уже неинтересно)
0
Alex_msk
0 / 0 / 1
Регистрация: 09.03.2016
Сообщений: 10
10.03.2016, 14:15  [ТС] #7
спасибо)
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4371 / 2346 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
10.03.2016, 18:37 #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)));
Куда уж проще...
0
10.03.2016, 18:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2016, 18:37
Привет! Вот еще темы с решениями:

Вывести на консоль те строки, длина которых меньше (больше) средней, а также длину.
Собственно вот проблема..Мне помогали писать данную программу но она что-то все...

Даны натуральные числа N, K, L (K<L). Вывести на экран все делители числа N, которые меньше K или больше L
Даны натуральные числа N, K, L (K&lt;L). Вывести на экран все делители числа N,...

Вывести строки символов на экран
Не получается вывести строки символов на экран, нужна помощь более опытных:...

Вывести на экран только предложения, содержащие двузначные числа (строки: string)
Помогите разобраться со строками, второй вечер не могу найти ошибку. Задание...


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

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

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