distance
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору life zxz Цитата: Вторая:Ввести с клавиатуры произвольное число строк и целое k. Строки, длина которых больше k, укоротить. Укорачивание строки до длины k оформить как функцию. Массив исходных строк и массив измененных строк вывести на экран консоли. | Код: #include "stdafx.h" #include <string> #include <vector> #include <iostream> #include <algorithm> #include <functional> #include <iterator> typedef std::vector<std::string> V; template < typename T, template <typename> class _Cmp> struct length_op : public std::unary_function< typename T::value_type, void> { typedef typename T::value_type value_type; typedef typename value_type::size_type size_type; length_op(size_type len) : length_(len) {} void operator()(value_type& v) const { if (cmp_(v.size(), length_)) v.resize(length_); } const size_type length_; const _Cmp<size_type> cmp_; }; template <typename T, typename _Pred1> _Pred1 truncate_if(T& v, _Pred1 pred) { return std::for_each(v.begin(), v.end(), pred); } template < typename _E, typename _Tr, template <typename, typename> class OS> OS<_E,_Tr>& operator<<(OS<_E,_Tr>& os, const V& v) { const _E sep[] = { _E(' '), 0 }; std::copy(v.begin(), v.end(), std::ostream_iterator<V::value_type, _E, _Tr>(os, sep)); return os; } int main() { V v; int k; std::cin >> k; std::string s; while (std::cin >> s) v.push_back(s); std::cout << v << std::endl; truncate_if(v, length_op<V, std::greater>(k)); std::cout << v << std::endl; return (0); } | |