12/04/13 09:09:14.47
ごめんごめん途中で送信してしまった。
読まなくても良いくらいC++でのスタンダードな回答。
struct filter_t{ int e; const char *t; };
struct fizzbuzz_t
{
int in; std::string out;
fizzbuzz_t &operator >>( filter_t &f )
{ if( 0==in%f.e ){ out.append( f.t ); } return *this; }
operator const char *()
{ if( out.length() ) return out.c_str();
static char tmp[50]; itoa( in, tmp, 10 ); return tmp; }
};
fizzbuzz_t operator >>( int i, filter_t &f ){ fizzbuzz_t fb; fb.in = i; fb>>f; return fb; }
filter_t fizz = { 3, "Fizz", };
filter_t buzz = { 5, "Buzz", };
filter_t gizz = { 7, "Gizz", };
int main(){ 105>>fizz>buzz>>gizz; return 0; }