std::string に trim_left と trim_right
std::wstring に wtrim_left と wtrim_right を拡張する
#ifndef SHAND_EXTENSION_STD_STRING_INCLUDE #define SHAND_EXTENSION_STD_STRING_INCLUDE #include <string> #include <functional> // std::tr1::result_of namespace shand { namespace extension { // trim_left struct trim_left { typedef std::string result_type; std::string operator()(const std::string& source) const { std::string temp = source; temp.erase(0, temp.find_first_not_of(' ')); return temp; } }; struct wtrim_left { typedef std::wstring result_type; std::wstring operator()(const std::wstring& source) const { std::wstring temp = source; temp.erase(0, temp.find_first_not_of(L' ')); return temp; } }; // trim_right struct trim_right { typedef std::string result_type; std::string operator()(const std::string& source) const { std::string temp = source; temp.erase(temp.find_last_not_of(' ')+1); return temp; } }; struct wtrim_right { typedef std::wstring result_type; std::wstring operator()(const std::wstring& source) const { std::wstring temp = source; temp.erase(temp.find_last_not_of(L' ')+1); return temp; } }; template <class CharT, class Alloc, class Func> inline typename std::tr1::result_of<Func(const std::basic_string<CharT, Alloc>&)>::type operator|(const std::basic_string<CharT, Alloc>& source, Func func) { return func(source); } }} // namespace shand::extension #endif // SHAND_EXTENSION_STD_STRING_INCLUDE
サンプル
#include <iostream> #include <string> #include <shand/extension/string.hpp> using namespace std; using namespace shand::extension; int main() { string str = " abc "; string result = str|trim_left()|trim_right(); cout << "|" << result << "|" << endl; // |abc| return 0; }