Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2016, 21:34   #1
Westbrook
Новичок
Джуниор
 
Регистрация: 19.03.2016
Сообщений: 1
По умолчанию Переписать из файла предложения не содержащие символов тире, запятых и точек с запятыми в другой файл

Написать программу, которая считывает текст из файла и записывает в другой только предложения, не содержащие символов тире, запятых и точек с запятыми.
Westbrook вне форума Ответить с цитированием
Старый 20.03.2016, 01:00   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

http://rextester.com/CHKUC43006



Код:
#include <iostream>
#include <sstream>
#include <string>
#include <regex>
 
#define dENDL L"\n"


template<class Ch> struct validator 
{ 
    operator const char*()const { return "[^-,;]*"; }
};
    
template<> struct validator<wchar_t>
{ 
    operator const wchar_t*()const { return L"[^-,;]*"; }
};

template<class S, class C1, class C2> 
void process(S& stream, C1&& success, C2&& failed)
{
    using ch    = typename S::char_type;
    using str   = std::basic_string<ch>;
    using regex = std::basic_regex<ch>;
    using expr  = validator<ch>;
    
    str line;
    const static regex validator( expr{} );
    while (getline(stream, line)) 
        std::regex_match(line, validator)? 
            success(line):
            failed(line);
}

int main()
{
    // Написать программу, которая считывает текст из файла 
    // и записывает в другой только предложения, 
    // не содержащие символов тире, запятых и точек с запятыми.
    
    setlocale(LC_ALL, "");

    // --- тестовые данные
    std::wstringstream wss; wss <<
         L"hello, world"                         dENDL
         L"int value = 10; float f = 10.5; "     dENDL
         L"это предложение содержит тире '-'"    dENDL
         L"корректное предложение №1"            dENDL
         L"корректное предложение №2"            dENDL
    ;
    
    const auto copy = [](const std::wstring& line)
        { std::wcout << "line '" << line << L"' копируем...\n";  };

    const auto ignore = [](const std::wstring& line)
        { std::wcout << "line '" << line << L"' забракована...\n";  };

    
    process(wss, copy, ignore);
}

Последний раз редактировалось _Bers; 20.03.2016 в 01:09.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сформировать текстовый файл, в который записать все предложения исходного текста, содержащие кому Igor_Petrenko Помощь студентам 0 15.05.2014 00:21
С++.Вывод на экран только предложения, не содержащие запятых. intnower Помощь студентам 1 13.01.2012 13:37
C++ Исключить из введенного предложения все слова, содержащие заданную пользователем комбинацию из двух символов olegraperos Помощь студентам 4 16.10.2011 22:39
программа, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых shadowfiend C++ Builder 2 09.05.2011 21:48
Типизированный файл с натуральными числами. Числа, встречающиеся 1 раз переписать в другой файл [Паскаль] mifomen Помощь студентам 7 16.12.2010 22:00