4.8. Joining a Sequence of Strings
Problem
Given a sequence of strings, such as output from Example 4-10, you want to join them together into a single, long string, perhaps with a delimiter.
Solution
Loop through the sequence and append each string to the output string. You can handle
any standard sequence as input; Example
4-13 uses a vector of strings.
Example 4-13. Join a sequence of strings
#include <string>
#include <vector>
#include <iostream>
using namespace std;
void join(const vector<string>& v, char c, string& s) {
s.clear();
for (vector<string>::const_iterator p = v.begin();
p != v.end(); ++p) {
s += *p;
if (p != v.end() - 1)
s += c;
}
}
int main() {
vector<string> v;
vector<string> v2;
string s;
v.push_back(string("fee"));
v.push_back(string("fi"));
v.push_back(string("foe"));
v.push_back(string("fum"));
join(v, '/', s);
cout << s << '\n';
}Discussion
Example 4-13 has one technique that is slightly different from previous examples. Look at this line:
for (vector<string>::const_iterator p = v.begin();The previous string examples simply used iterators,
without the “const” part, but you can’t get away with that here because v is declared as a reference to a const object. If you have a const
container object, you can only use a const_iterator to
access its elements. This is because a plain iterator
allows writes to the object it refers to, which, of course, you can’t do if your container
object is const.
I declared v
const for two reasons. First, I know I’m not going to be modifying ...