fork download
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
#include <iostream>

// #include "item_iterator.h"
// Warning: only minimally tested.
// item_iterator.h
// Lifted from Jerry Coffin's 's prefix_ostream_iterator
#if !defined(ITEM_ITERATOR_H_)
#define  ITEM_ITERATOR_H_
#include <ostream>
#include <iterator>

template <class T,
class charT=char,
class traits=std::char_traits<charT> >

class item_iterator :
	public std::iterator<std::output_iterator_tag,void,void,void,void>
{
	std::basic_ostream<charT,traits> *os;
	charT const* delimiter;
	bool first_elem;
	const unsigned per_line;
	unsigned current_item;
public:
	typedef charT char_type;
	typedef traits traits_type;
	typedef std::basic_ostream<charT,traits> ostream_type;

	item_iterator(ostream_type& s, unsigned i=8)
		: os(&s),delimiter(0), first_elem(true), per_line(i), current_item(0)
	{}
	item_iterator(ostream_type& s, charT const *d, unsigned i=8)
		: os(&s),delimiter(d), first_elem(true), per_line(i), current_item(0)
	{}

	item_iterator<T,charT,traits>& operator=(T const &item)
	{
		if (!first_elem && delimiter != 0)
			*os << delimiter;
		*os << item;	
		first_elem = false;
		if (++current_item == per_line) {
			*os << "\n";
			current_item = 0;
			first_elem = true;
		}
		return *this;
	}

	item_iterator<T,charT,traits> &operator*() {
		return *this;
	}
	item_iterator<T,charT,traits> &operator++() {
		return *this;
	}
	item_iterator<T,charT,traits> &operator++(int) {
		return *this;
	}

};

#endif 

struct upper_string {
	std::string operator()(std::string s) const {
		for (int i=0; i<s.size(); i++)
			s[i] = toupper((unsigned char)s[i]);
		return s;
	}
};

int main() {
	std::vector<std::string> words((std::istream_iterator<std::string>(std::cin)),
					std::istream_iterator<std::string>());

	std::transform(words.begin(), words.end(), item_iterator<std::string>(std::cout, " ", 8),
			upper_string());
	return 0;
}
Success #stdin #stdout 0.02s 2864KB
stdin
this is some input to be processed by the program, which will convert the input to upper case and print it out at eight words per line.
stdout
THIS IS SOME INPUT TO BE PROCESSED BY
THE PROGRAM, WHICH WILL CONVERT THE INPUT TO
UPPER CASE AND PRINT IT OUT AT EIGHT
WORDS PER LINE.