10 std::ptrdiff_t pos = filename.find_last_of(
'.');
11 if(pos == std::string::npos)
return "";
12 else return filename.substr(pos + 1);
15 std::vector<std::string>
explode(
char separator,
const std::string& str) {
16 std::vector<std::string> vec;
17 std::string::size_type last_pos = 0;
18 std::string::size_type pos = str.find(separator);
19 while(pos != std::string::npos) {
20 std::string::size_type n = pos - last_pos;
21 std::string part = str.substr(last_pos, n);
24 pos = str.find(separator, last_pos);
26 vec.push_back(str.substr(last_pos));
31 std::string
implode(
char separator,
const std::vector<std::string>& vec) {
32 std::ostringstream ostr;
33 auto last = vec.end() - 1;
34 for(
auto it = vec.begin(); it != last; ++it) {
35 ostr << *it << separator;
42 std::string
to_lower(
const std::string& s_orig) {
43 std::string s(s_orig);
44 for(
char& c: s) c = std::tolower(c);
49 std::string
to_upper(
const std::string& s_orig) {
50 std::string s(s_orig);
51 for(
char& c: s) c = std::toupper(c);
56 std::string
replace_all(
const std::string& subject_orig,
const std::string& find,
const std::string& replace) {
57 std::string subject = subject_orig;
63 std::size_t
replace_all_inplace(std::string& subject,
const std::string& find,
const std::string& replace) {
65 std::size_t count = 0;
66 while( (pos = subject.find(find, pos)) != std::string::npos ) {
67 subject.replace(pos, find.length(), replace);
68 pos += replace.length();
77 for(
char c : str) h += c;
std::size_t replace_all_inplace(std::string &subject, const std::string &find, const std::string &replace)
std::string implode(char separator, const std::vector< std::string > &vec)
int string_hash(const std::string &str)
std::string replace_all(const std::string &subject_orig, const std::string &find, const std::string &replace)
std::string to_upper(const std::string &s_orig)
std::string file_name_extension(const std::string &filename)
std::string to_lower(const std::string &s_orig)
std::vector< std::string > explode(char separator, const std::string &str)