c++stringstrip

Similar function in C++ to Python's strip()?


There is a very useful function in Python called strip(). Any similar ones in C++?


Solution

  • There's nothing built-in; I used to use something like the following:

    template <std::ctype_base::mask mask>
    class IsNot
    {
        std::locale myLocale;       // To ensure lifetime of facet...
        std::ctype<char> const* myCType;
    public:
        IsNot( std::locale const& l = std::locale() )
            : myLocale( l )
            , myCType( &std::use_facet<std::ctype<char> >( l ) )
        {
        }
        bool operator()( char ch ) const
        {
            return ! myCType->is( mask, ch );
        }
    };
    
    typedef IsNot<std::ctype_base::space> IsNotSpace;
    
    std::string
    trim( std::string const& original )
    {
        std::string::const_iterator right = std::find_if( original.rbegin(), original.rend(), IsNotSpace() ).base();
        std::string::const_iterator left = std::find_if(original.begin(), right, IsNotSpace() );
        return std::string( left, right );
    }
    

    which works pretty well. (I now have a significantly more complex version which handles UTF-8 correctly.)