#include <iostream>
#include <vector>
#include <sstream>
#include <iterator>
#include <algorithm>
using namespace std;
// From http://stackoverflow.com/questions/5689003/how-to-implode-a-vector-of-strings-into-a-string-the-elegant-way
string join(vector<string>& strings, const string delimeter) {
return std::accumulate(strings.begin(), strings.end(), std::string(),
[](const std::string& a, const std::string& b) -> std::string {
return a + (a.length() > 0 ? "^" : "") + b; // won't let me use delimeter instead of hardcoded string
} );
}
string join2(vector<string>& strings, const char delimeter) { // copies too much of delimeter; works fine if delimeter is '\0'
stringstream result;
if (delimeter == '\0') {
copy(strings.begin(), strings.end(), ostream_iterator<string>(result));
} else {
copy(strings.begin(), strings.end(), ostream_iterator<string>(result, &delimeter));
}
return result.str();
}
int main() {
vector<string> parsedTokens = {"Hello", ",", " ", "World", "!"};
string joinedString = join(parsedTokens, "^");
cout << joinedString << endl;
joinedString = join2(parsedTokens, '^');
cout << joinedString << endl;
return 0;
}