#include <iostream>
#include <algorithm>
#include <string>
#include <locale>
 
int main() {
    
    using namespace std;
    using namespace std::placeholders;
    
    typedef std::string String;
    typedef String::value_type char_type;
    
    String input = "how are you";
    locale default_locale;
    
    auto is_graph = bind( isgraph<char_type>, _1, cref(default_locale) );
    auto is_digit = bind( isspace<char_type>, _1, cref(default_locale) );
    
    for( String::iterator rev_begin = input.begin(), rev_end;
         rev_begin != input.end(); rev_begin = rev_end ) {
        
        rev_begin = find_if( rev_begin, input.end(), is_graph );
        rev_end = find_if( rev_begin, input.end(), is_digit );
        
        if( rev_begin == input.end() )
            break;
        
        reverse( rev_begin, rev_end );
    }
    
    cout << input << endl;
}