String Util

链接:https://www.zhihu.com/question/35967887/answer/125238385
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

std::vector<std::string> split(const std::string &s, const std::string &d)
{
    std::vector<std::string> v;
    char *str = new char[s.size()+1];
    strcpy(str, s.c_str());
    while (char *t = strsep(&str, d.c_str()))
        v.push_back(t);
    delete[] str;
    return v;
}

std::string &ltrim(std::string &s)
{
    if (s.empty()) return s;
    std::string::const_iterator iter = s.begin();
    while (iter != s.end() && isspace(*iter++));
    s.erase(s.begin(), --iter);
    return s;
}

std::string &rtrim(std::string &s)
{
    if (s.empty()) return s;
    std::string::const_iterator iter = s.end();
    while (iter != s.begin() && isspace(*--iter));
    s.erase(++iter, s.end());
    return s;
}

std::string &trim(std::string &s)
{
    ltrim(s);
    rtrim(s);
    return s;
}

bool startsWith(const std::string &str, const std::string &prefix)
{
    return prefix.size() <= str.size() &&
           std::equal(prefix.cbegin(), prefix.cend(), str.cbegin());
}

bool endsWith(const std::string &str, const std::string &suffix)
{
    return suffix.size() <= str.size() &&
           std::equal(suffix.crbegin(), suffix.crend(), str.crbegin());
}

std::string::size_type indexOf(const std::string &str, const std::string &substr)
{
    return str.find(substr);
}

std::string toUpper(const std::string &str)
{
    std::string upper(str.size(), '\0');
    std::transform(str.cbegin(), str.cend(), upper.begin(), ::toupper);
    return upper;
}

std::string toLower(const std::string &str)
{
    std::string lower(str.size(), '\0');
    std::transform(str.cbegin(), str.cend(), lower.begin(), ::tolower);
    return lower;
}

std::string format(const char *fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    int len = vsnprintf(nullptr, 0, fmt, ap);
    va_end(ap);
    std::string buf(len+1, '\0');
    va_start(ap, fmt);
    vsnprintf(&buf[0], buf.size(), fmt, ap);
    va_end(ap);
    buf.pop_back();
    return buf;
}

#define log(fmt, ...) (std::cout << format(fmt, ##__VA_ARGS__) << '\n')

留言

這個網誌中的熱門文章

https://leetcode.com/contest/leetcode-weekly-contest-52/problems/longest-univalue-path/

https://leetcode.com/contest/leetcode-weekly-contest-52/problems/maximum-sum-of-3-non-overlapping-subarrays/