1 #include "StringUtil.h" 2 #include "no_warning_algorithm" 3 #include "no_warning_sstream" 4 5 using namespace std; 6 7 namespace opencollada 8 { StartsWith(const std::string & str,const std::string & start)9 bool String::StartsWith(const std::string & str, const std::string & start) 10 { 11 return str.substr(0, start.length()) == start; 12 } 13 EndsWith(const string & str,const string & end)14 bool String::EndsWith(const string & str, const string & end) 15 { 16 if (end.length() > str.length()) 17 return false; 18 return equal(end.rbegin(), end.rend(), str.rbegin()); 19 } 20 21 // Split string by whitespace Split(const string & s)22 vector<string> String::Split(const string & s) 23 { 24 if (s.empty()) 25 return vector<string>(); 26 27 vector<string> parts; 28 istringstream iss(s); 29 while (iss && !iss.eof()) 30 { 31 string sub; 32 iss >> sub; 33 parts.emplace_back(sub); 34 } 35 return parts; 36 } 37 Lower(const string & str)38 string String::Lower(const string & str) 39 { 40 string res = str; 41 transform(res.begin(), res.end(), res.begin(), [](const string::value_type & c) { return static_cast<string::value_type>(::tolower(c)); }); 42 return res; 43 } 44 Replace(const string & str,const string & search_str,const string & replace_str)45 string String::Replace(const string & str, const string & search_str, const string & replace_str) 46 { 47 if (str.empty() && search_str.empty()) 48 return replace_str; 49 50 if (search_str.empty()) 51 return str; 52 53 string res(str); 54 55 size_t search_len = search_str.length(); 56 size_t replace_len = replace_str.length(); 57 58 for (size_t found = res.find(search_str); found != string::npos; found = res.find(search_str, found + replace_len)) 59 res.replace(found, search_len, replace_str); 60 61 return res; 62 } 63 Replace(string & str,char a,char b)64 size_t String::Replace(string & str, char a, char b) 65 { 66 size_t count = 0; 67 for (auto pos = str.find(a); pos != string::npos; pos = str.find(a, pos + 1)) 68 { 69 str[pos] = b; 70 ++count; 71 } 72 return count; 73 } 74 }