basic_string::find_first_not_ofを単純にラップした関数です。
一致しなかった最初の位置ではなく、先頭から一致した部分を取り除いた文字列を返します。
#include <string> template <class CharT, class Alloc, class Target> std::basic_string<CharT, Alloc> drop_while_string(const std::basic_string<CharT, Alloc>& src, const Target& target) { typedef std::basic_string<CharT, Alloc> string_type; typename string_type::size_type const pos = src.find_first_not_of(target); return pos == string_type::npos ? src : src.substr(pos); }
#include <cassert> #include <string> int main() { const std::string s = "0012345"; assert(drop_while_string(s, '0') == "12345"); assert(drop_while_string(s, "00") == "12345"); assert(drop_while_string(s, std::string("00")) == "12345"); }