Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Определить манипулятор

10.07.2010, 04:22. Показов 1570. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что-то часто я тут начал писать... Но тем не менее...

Задание определить манипулятор, который игнорирует все запятые и точки до конца строки. Немножко вошел в шок. Как это сделать? Как я понимаю нужно самому написать манипулятор. Поискал по книге примеры. Нашел один.
C++
1
2
3
4
5
6
7
//Игнорирует все символы до конца строки
template <class charT, class traits>
inline std::basic_istream<charT,traits>&ignoreLine(std::basic_istream<charT,traits>&strm)
{
    strm.ignore(std::numeric_limits<int>::max, strm.widen('\n'));
    return strm;
}
Поменял под свои два символа.

C++
1
2
3
4
5
6
template <class charT, class traits>
inline std::basic_istream<charT,traits>&ignoreLine(std::basic_istream<charT,traits>&strm)
{
    strm.ignore(std::numeric_limits<int>::max, strm.widen(',','.'));
    return strm;
}
Компилятор не ругается, все наверное хорошо... Но как это чудо вызвать в мейне? Да еще хотелось бы, чтобы это чудо строка отформатированная таким образом еще и выводилась на экран... Как это возможно сделать? Да и вообще. Правильно ли тут написано?

Вопрос отпал. Вышло как-то так. Может кому пригодится. Работает.

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
#include <iostream>
#include <cstring>
class ignore_delim
{
private:
    char String[255];
public:
    ignore_delim(){}
    ~ignore_delim(){}
    friend std::ostream& operator <<(std::ostream& os, ignore_delim& str);
};
std::ostream& operator <<(std::ostream& os, ignore_delim& Ob)
{
    char c=',';
    char d='.';
    for(int i=0; i<strlen(Ob.String); i++)
        if(Ob.String[i]==c)
            Ob.String[i]=' ';
    for(int i=0; i<strlen(Ob.String); i++)
        if(Ob.String[i]==d)
            Ob.String[i]=' ';
    return os;
}
int main()
{
    char str[255];
    std::cout<<"Enter string\n";
    std::cin.getline(str, 255);
    std::cout<<ignore_delim()<<str<<'\n';
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2010, 04:22
Ответы с готовыми решениями:

Манипулятор ws
Собственно вопрос в следующем: может ли кто-то показать, как использовать манипулятор ws. Он, если я правильно понял, должен пробелы...

Собственный манипулятор
Здорова господа! Я пытаюсь создать свой собственный манипулятор, который будет принимать основу числа: десять шестнадцать и два и само...

Setw() манипулятор
Проблема в том, что не могу разобраться как правильно отформатировать свою результат, хочу вывести значения, в виде таблицы. Вот код: ...

4
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
10.07.2010, 13:24
Лучший ответ Сообщение было отмечено ForEveR как решение

Решение

Может я что-то не правильно понял, но по-моему вот так проще:
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
#include <iostream>
#include <string>
 
class DelimRemover {
    std::string m_sDelim;
public:
    DelimRemover(const std::string & delim) : m_sDelim(delim) {}
    std::string & operator () (std::string & str) {
        size_t pos;
        while ( ( pos = str.find_first_of(m_sDelim) ) != std::string::npos )
            str.erase(pos, 1);
        return str;
    }
};
 
int main(){
    std::string str("abc, def, gh.1234!xyz.");
    DelimRemover dr(",.!");
    
    std::cout << "Before: " << str << std::endl;
    std::cout << "After: " << dr(str) << std::endl;
    
    return 0;
}
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.07.2010, 14:54  [ТС]
easybudda, Ну да возможно. Тот пример с перегрузкой оператора вывода в поток я взял из книги Методики программирования Шилдта. Правда там было про добавление начальных пропусков... Вообщем пришлось поднапрячься. Спасибо!
0
10 / 10 / 2
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
10.07.2010, 21:23
easybudda, а как бы выглядел класс, если надо было бы удалить не делимитеры, а теги например
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
11.07.2010, 05:59
Цитата Сообщение от Egeni Посмотреть сообщение
а как бы выглядел класс, если надо было бы удалить не делимитеры, а теги например
Да примерно так же. Только в строке искался бы не первый из удаляемых символов, а вся подстрока (тег, слово из трёх букв, ещё что-нибудь)...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.07.2010, 05:59
Помогаю со студенческими работами здесь

Манипулятор std::endl
Добрый день! Манипулятор std::endl - это некая глобальная функция, но почему она пишется без скобок и без параметров? Пример: ...

Символ '\n' и манипулятор endl
Встретил в одной книге вот такое выражение (дословно): Если операционная система не использует буферизацию вывода, то между символом...

Сделать манипулятор на функцию
Сделал манипуляторы на вывод на экран и в консоль и др. Как сделать на функцию???

Манипулятор ввода / вывода
Чем отличается манипулятор ввода\вывода от пользовательский ввод\вывод ?

Создайте манипулятор вывода
Помогите срочно решить задачу Создайте манипулятор вывода sethex(), который осуществляет вывод в шестнадцатеричной системе счисления и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru