drop_while_string

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