Recipe 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 its contents, so I want
the compiler to give me an error if I do. The compiler is much better at spotting that kind of thing than I
Page 171
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Pdf splitter - Split, seperate PDF into multiple files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Explain How to Split PDF Document in Visual C#.NET Application
split pdf into multiple files; break password pdf
Pdf splitter - VB.NET PDF File Split Library: Split, seperate PDF into multiple files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Splitter Control to Disassemble PDF Document
cannot print pdf file no pages selected; break a pdf file into parts
Page 172
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
C# PDF: C#.NET PDF Document Merging & Splitting Control SDK
C#.NET PDF Splitter to Split PDF File. In this section, we aims to tell you how to divide source PDF file into two smaller PDF documents at the page index you
pdf split pages; how to split pdf file by pages
C# Word: .NET Merger & Splitter Control to Merge & Split MS Word
a larger Word file or how to divide source MS Word file into several smaller documents, RasterEdge designs this C#.NET MS Word merger & splitter control SDK.
split pdf into individual pages; pdf insert page break
Page 173
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
VB.NET Word: Merge Multiple Word Files & Split Word Document
and editing controls, this VB.NET Word merger and splitter library SDK We are dedicated to provide powerful & profession imaging controls, PDF document, image
combine pages of pdf documents into one; break apart a pdf
VB.NET TIFF: .NET TIFF Splitting Control to Split & Disassemble
splitting, please follow this link to C#.NET TIFF splitter control tutorial OpenDocumentFile(fileName, New TIFDecoder()) 'use TIFDecoder open a pdf file Dim
break pdf into multiple pages; break pdf into multiple documents
Recipe 4.9. Finding Things in Strings
Problem
You want to search a string for something. Maybe it's a single character, another string, or one of (or not
of) an unordered set of characters. And, for your own reasons, you have to find it in a particular way,
such as the first or last occurrence, or the first or last occurrence relative to a particular index.
Solution
Use one of basic_string's "find" member functions. Almost all start with the word "find," and their name
gives you a pretty good idea of what they do. Example 4-15
shows how some of the find member
functions work.
Example 4-15. Searching strings
#include <string>
#include <iostream>
int main( ) {
std::string s = "Charles Darwin";
std::cout << s.find("ar") << '\n';            // Search from the
// beginning
std::cout << s.rfind("ar") << '\n';           // Search from the end
std::cout << s.find_first_of("swi")           // Find the first of
<< '\n';                            // any of these chars
std::cout << s.find_first_not_of("Charles")   // Find the first
<< '\n';                            // that's not in this
// set
std::cout << s.find_last_of("abg") << '\n';   // Find the first of
// any of these chars
// starting from the
// end
std::cout << s.find_last_not_of("aDinrw")     // Find the first
<< '\n';                            // that's not in this
// set, starting from
// the end
}
Each of the find member functions is discussed in more detail in the "Discussion" section.
Discussion
There are six different find member functions for finding things in strings, each of which provides four
overloads. The overloads allow for either basic_string or charT* parameters (charT is the character
type). Each has a basic_string::size_type parameter pos that lets you specify the index where the search
should begin, and there is one overload with a size_type parameter n that allows you only to search
based on the first n characters from the set.
It's hard to keep track of all of these member functions, so Table 4-2 gives a quick reference of each
function and its parameters.
Table 4-2. Member functions for searching strings
Page 174
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Online Split PDF file. Best free online split PDF tool.
RasterEdge Visual C# .NET PDF document splitter control toolkit SDK can not only offer C# developers a professional .NET solution to split PDF document file
pdf split; break a pdf into separate pages
VB.NET PowerPoint: Merge and Split PowerPoint Document(s) with PPT
Then, here comes the VB.NET PPT document splitter in handy. Note: If you want to see more PDF processing functions in VB.NET, please follow the link.
c# split pdf; pdf split
Page 175
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
C# PDF Page Processing: Split PDF Document - C#.NET PDF splitter control to divide one PDF file into two smaller PDF documents. Recommend this to Google+.
break pdf password online; pdf file specification
C# PowerPoint - Split PowerPoint Document in C#.NET
RasterEdge Visual C# .NET PowerPoint document splitter control toolkit SDK can not only offer C# developers a professional .NET solution to split PowerPoint
break pdf file into parts; acrobat split pdf into multiple files
Page 176
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Recipe 4.10. Finding the nth Instance of a Substring
Problem
Given two strings source and pattern, you want to find the nth occurrence of pattern in source.
Solution
Use the find member function to locate successive instances of the substring you are looking for. 
Example 4-17
contains a simple nthSubstr function.
Example 4-17. Locate the nth version of a substring
#include <string>
#include <iostream>
using namespace std;
int nthSubstr(int n, const string& s,
const string& p) {
string::size_type i = s.find(p);     // Find the first occurrence
int j;
for (j = 1; j < n && i != string::npos; ++j)
i = s.find(p, i+1); // Find the next occurrence
if (j == n)
return(i);
else
return(-1);
}
int main( ) {
string s = "the wind, the sea, the sky, the trees";
string p = "the";
cout << nthSubstr(1, s, p) << '\n';
cout << nthSubstr(2, s, p) << '\n';
cout << nthSubstr(5, s, p) << '\n';
}
Discussion
There are a couple of improvements you can make to nthSubstr as it is presented in Example 4-17
.
First, you can make it generic by making it a function template instead of an ordinary function. Second,
you can add a parameter to account for substrings that may or may not overlap with themselves. By
"overlap," I mean that the beginning of the string matches part of the end of the same string, as in the
word "abracadabra," where the last four characters are the same as the first four. Example 4-18
demonstrates this.
Example 4-18. An improved version of nthSubstr
#include <string>
#include <iostream>
using namespace std;
template<typename T>
int nthSubstrg(int n, const basic_string<T>& s,
const basic_string<T>& p,
bool repeats = false) {
string::size_type i = s.find(p);
Page 177
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 178
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Page 179
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Recipe 4.11. Removing a Substring from a String
Problem
You want to remove a substring from a string.
Solution
Use the find, erase, and length member functions of basic_string:
std::string t = "Banana Republic";
std::string s = "nana";
std::string::size_type i = t.find(s);
if (i != std::string::npos)
t.erase(i, s.length( ));
This will erase s.length( ) elements starting at the index where find found the first occurrence of the
substring.
Discussion
There are lots of variations on the theme of finding a substring and removing it. For example, you may
want to remove all instances of a substring instead of just one. Or just the last one. Or the seventh one.
Each time the steps are the same: find the index of the beginning of the pattern you want to remove, then
call erase on that index for the next n characters, where n is the length of the pattern string. See Recipe
4.9
for the different member functions for finding things in strings.
Chances are you also want to make your substring-removal function generic, so you can use it on strings
of any kind of character. Example 4-19
offers a generic version that removes all instances of the pattern
from a string.
Example 4-19. Remove all substrings from a string (generic version)
#include <string>
#include <iostream>
using namespace std;
template<typename T>
void removeSubstrs(basic_string<T>& s,
const basic_string<T>& p) {
basic_string<T>::size_type n = p.length( );
for (basic_string<T>::size_type i = s.find(p);
i != basic_string<T>::npos;
i = s.find(p))
s.erase(i, n);
}
int main( ) {
string s = "One fish, two fish, red fish, blue fish";
string p = "fish";
removeSubstrs(s, p);
cout << s << '\n';
}
The basic_string member function erase is what does the important work here. In <string>, it is
Page 180
ABC Amber CHM Converter Trial version, http://www.processtext.com/abcchm.html
Documents you may be interested
Documents you may be interested