Подобна ли функция в C ++ для Python's strip ()? - PullRequest
3 голосов
/ 20 февраля 2012

В Python есть очень полезная функция, которая называется strip () .Есть ли похожие в C ++?

1 Ответ

5 голосов
/ 20 февраля 2012

Там нет ничего встроенного;Раньше я использовал что-то вроде следующего:

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 );
}

, который работает довольно хорошо.(У меня теперь значительно более сложная версия, которая правильно обрабатывает UTF-8.)

...