return result;
}
+string &append(string &str, const string &sep, const string &other)
+{
+ if(!str.empty() && !other.empty())
+ str += sep;
+ str += other;
+ return str;
+}
+
+string join(const string &str1, const string &sep, const string &str2)
+{
+ string result = str1;
+ return append(result, sep, str2);
+}
+
string c_unescape(const std::string &str)
{
bool escape = false;
separators will cause an empty string to be placed in the result. */
std::vector<std::string> split_fields(const std::string &str, char sep, int max_split = -1);
+/** Appends a string to another, using a separator if both are non-empty. */
+std::string &append(std::string &str, const std::string &sep, const std::string &other);
+
+/** Joins two strings, using a separator if both are non-empty. */
+std::string join(const std::string &str1, const std::string &sep, const std::string &str2);
+
/** Concatenates strings from an iterator range. */
template<typename Iter>
std::string join(Iter begin, Iter end, const std::string &sep = " ")
{
std::string result;
for(Iter i=begin; i!=end; ++i)
- {
- if(i!=begin)
- result += sep;
- result += *i;
- }
+ append(result, sep, *i);
return result;
}