#include "util.h" #include unsigned int mrbesen::Util::count(const std::string& str, char c) { size_t pos = 0; long count = -1; do { pos = str.find(c, pos); ++count; } while((pos++) != std::string::npos); return (unsigned int) count; } bool icompare_pred(unsigned char a, unsigned char b) { return std::tolower(a) == std::tolower(b); } bool mrbesen::Util::equalsIgnoreCase(const std::string& a, const std::string& b, size_t max) { size_t al = a.size(), bl = b.size(); if((al == 0 && bl == 0) || max == 0) return true; if(al != bl && (al < max || bl < max)) { return false; } if(max == std::string::npos) { return std::equal(b.begin(), b.end(), a.begin(), icompare_pred); } else { if(max > al) max = al; if(max > bl) max = bl; return std::equal(b.begin(), b.begin()+max, a.begin(), icompare_pred); } } void mrbesen::Util::toLower(const std::string& in, std::string& out) { out = ""; out.reserve(in.size()); for(char c : in) { out += std::tolower(c); } }