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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access