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

Кастомный манипулятор для потока

22.03.2018, 14:36. Показов 1986. Ответов 9

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

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
 
int main()
{
    std::string name;
    std::cin >> name;
    std::cout << uppercase << "Hello, " << name << "\n";
}
Манипулятор uppercase должен преобразовать строку у верхнему регистру. Т.е. если введем world, на выходе должны получить HELLO, WORLD

Если такое возможно, то как это сделать? В сети не нашел подобных примеров.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.03.2018, 14:36
Ответы с готовыми решениями:

Написать программу «Манипулятор робота» так, чтобы она рисовала манипулятор из n сегментов
Здравствуйте)). Прошу помочь. Написать программу «Манипулятор робота» так, чтобы она рисовала манипулятор из n сегментов. Для...

Кастомный userAgent для iframe
Всем привет! Помогите, пож-та, подгрузить страничку чужого сайта в iframe, подменив userAgent. Дело в том, что желаемая страничка...

Кастомный scrollbar для ListBox'a
подскажите, как убрать скроллбар у ListBox'a и нарисовать свой или связать его, например, с трекбаром(чтобы ListBox прокручивался при...

9
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
22.03.2018, 15:00
Цитата Сообщение от wertex Посмотреть сообщение
возможно ли написание кастомного манипулятора
да, возможно..
это даже уже сделали за вас http://en.cppreference.com/w/c... te/toupper
там и пример сразу есть как сделать)
0
1 / 1 / 1
Регистрация: 15.08.2010
Сообщений: 21
22.03.2018, 15:05  [ТС]
По ссылке описана обычная функция. Мне нужен именно манипулятор, который на вход принимает поток и изменяет его.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
22.03.2018, 15:07
Цитата Сообщение от wertex Посмотреть сообщение
вход принимает поток
Какой? Потоки есть разные.
Цитата Сообщение от wertex Посмотреть сообщение
изменяет его
Зачем? Ради перевода строки?..
0
1 / 1 / 1
Регистрация: 15.08.2010
Сообщений: 21
22.03.2018, 15:12  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
Какой? Потоки есть разные.
Конкретно поток из первого сообщения.

Цитата Сообщение от Azazel-San Посмотреть сообщение
Зачем? Ради перевода строки?..
Какая разница зачем? Интересует тема написания манипулятора для отображения данных потока в нужном виде. uppercase был выбран исключительно в качестве примера.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
22.03.2018, 15:26
wertex, понятно, на сколько я помню все потоки наследуются от одного "интерфейса" basic_ios вроде, можно от него унаследоваться, но наверно лучше от streambuf и определить свои методы в нем.
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
22.03.2018, 17:21
Лучший ответ Сообщение было отмечено wertex как решение

Решение

Такой вариант не подойдёт?
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
#include <iostream>
#include <algorithm>
 
using namespace std;
 
class StreamProxy
{
private:
    std::ostream &stream_;
public:
    StreamProxy( std::ostream &stream ) : stream_( stream ) {}
    StreamProxy& operator << ( const char *str )
    {
        string s{str};
        
        for_each(s.begin(),s.end(),[](char &c){
            c=::toupper(c);
        });
        
        stream_ <<s;
        return *this;
    }
    template <class T>
    StreamProxy& operator << ( const T &var )
    {
        stream_ << var;
        return *this;
    }
};
 
class Manipulator
{
    
};
 
StreamProxy operator << ( std::ostream &os, Manipulator )
{
    return StreamProxy( os );
}
 
 
int main()
{ 
    std::cout <<Manipulator()<<"Hello!\n";
}
Добавлено через 8 минут
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
#include <iostream>
#include <algorithm>
 
using namespace std;
 
namespace Manip
{
    
class StreamProxy
{
private:
    std::ostream &stream_;
public:
    StreamProxy( std::ostream &stream ) : stream_( stream ) {}
    StreamProxy& operator << ( const char *str )
    {
        string s{str};
        
        for_each(s.begin(),s.end(),[](char &c){
            c=::toupper(c);
        });
        
        stream_ <<s;
        return *this;
    }
    template <class T>
    StreamProxy& operator << ( const T &var )
    {
        stream_ << var;
        return *this;
    }
};
 
class Manipulator
{
    
};
 
StreamProxy operator << ( std::ostream &os, Manipulator )
{
    return StreamProxy( os );
}
    
   Manipulator manipulator; 
}
 
int main()
{ 
    //using Manip::manipulator;
    //std::cout <<manipulator<<"Hello!\n";
    std::cout << Manip::manipulator<<"Hello!\n";
}
1
1 / 1 / 1
Регистрация: 15.08.2010
Сообщений: 21
22.03.2018, 18:12  [ТС]
Спасибо!

А вот в таком варианте:

C++ (Qt)
1
2
    std::string name = "aaa";
    std::cout << Manip::manipulator << "Hello, world! " <<  name << "\n";
можно как-то сделать, чтобы вывелось HELLO WORLD! AAA. Сейчас aaa маленикими буквами выводится.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.03.2018, 18:30
Определить что-то наподобие

C++
1
2
3
4
5
6
7
8
9
    StreamProxy& operator << ( std::string s )  // передача по значению
    {       
        for_each(s.begin(),s.end(),[](char &c){
            c=::toupper(c);
        });
        
        stream_ <<s;
        return *this;
    }
1
1 / 1 / 1
Регистрация: 15.08.2010
Сообщений: 21
22.03.2018, 18:35  [ТС]
Всем спасио за ликбез!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.03.2018, 18:35
Помогаю со студенческими работами здесь

Кастомный ArrayAdapter для Spinner
Создал свой адаптер. Привязал его к списку Spinner. Получил идентификатор выбранной записи. Ну вроде бы как получается в каждом элементе...

Кастомный TrackBar для плеера
Доброго времени суток, камрады. Новая проблема нарисовалась.. Пишу свой контрол - кастомный TrackBar для плеера. Собственно заготовка...

Кастомный шрифт для всего приложения
подскажите лучший способ использовать кастомный шрифт для всего приложения.

Кастомный рекламный блок для приложения
Доброго времени суток. Как сделать свой баннер для открутки js или простых рекламных блоков приложений с возможностью обновления без...

Кастомный горизонтальный скролл для слайдера
Как сделать работающую полосу прокрутки для фотографий, которую нарисовал дизайнер? Например, такую http://************/f3qq36


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru