Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с файлами и строками (MSVC++)

40K
24 марта 2009 года
qpurace
10 / / 20.03.2009
Консольное приложение, должно, считывая текст из файла, вывести его на экран, при этом заменяя цифры от 0 до 9 на слова "один", "два"...
каждое новое предложение должно начинаться с новой строки.:(
Заранее благодарю за помощь!
32K
24 марта 2009 года
Rififi
54 / / 04.06.2008
поюзал boost, ибо влом инициализировать мапу вручную...
Код:
#include <boost/assign.hpp>

#include <map>
#include <string>
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <locale>

using boost::assign::map_list_of;

/*
Консольное приложение, должно, считывая текст из файла, вывести его на экран, при этом заменяя цифры от 0 до 9 на слова "один", "два"...
каждое новое предложение должно начинаться с новой строки.
Заранее благодарю за помощь!
*/

struct line
{
    typedef std::string value_type;
    friend std::istream& operator>> (std::istream& s, line& l)
    {
        std::getline(s, l.buf_);
        return (s);
    }

    friend std::ostream& operator<< (std::ostream& s, const line& l)
    { return s << l.buf_; }

    line() {}
    line(const value_type& s) : buf_(s) {}
    const value_type& str() const { return (buf_); }
    value_type buf_;
};

template <typename T>
struct replacer : public std::unary_function<T, T>
{  
    typedef typename T::value_type value_type;
    typedef typename value_type::const_iterator const_iterator;
    typedef std::map<char, value_type> corrections_table;
    const corrections_table corrections_;

    replacer() : corrections_(map_list_of
        ('0', "ноль")('1', "один")('2', "два")('3', "три")('4', "четыре")
        ('5', "пять")('6', "шесть")('7', "семь")('8', "восемь")('9', "девять")) {}

    T operator () (const T& v) const
    {
        value_type r;
        const value_type& s = v.str();
        for (const_iterator i = s.begin(); i != s.end(); ++i)
        {              
            corrections_table::const_iterator found = corrections_.find(*i);
            if (found != corrections_.end())
                r.append(found->second);
            else
                r += *i;
        }

        return r;
    }
};

int main()
{
    std::ifstream ifs("in.txt");
    std::ofstream ofs("out.txt");
    std::transform(
        std::istream_iterator<line>(ifs),
        std::istream_iterator<line>(),
        std::ostream_iterator<line>(ofs, "\n"),
        replacer<line>());
    return (0);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог