Creating and initializing C++ strings

Creating and initializing strings is a straightforward proposition and fairly flexible. In the SmallString.cpp example in this section, the first string, imBlank, is declared but contains no initial value. Unlike a C char array, which would contain a random and meaningless bit pattern until initialization, imBlank does contain meaningful information. This string object has been initialized to hold ?no characters? and can properly report its zero length and absence of data elements through the use of class member functions.

The next string, heyMom, is initialized by the literal argument “Where are my socks?” This form of initialization uses a quoted character array as a parameter to the string constructor. By contrast, standardReply is simply initialized with an assignment. The last string of the group, useThisOneAgain, is initialized using an existing C++ string object. Put another way, this example illustrates that string objects let you do the following:

  • Create an empty string and defer initializing it with character data.
  • Initialize a string by passing a literal, quoted character array as an argument to the constructor.
  • Initialize a string using the equal sign (=).
  • Use one string to initialize another.

These are the simplest forms of string initialization, but variations offer more flexibility and control. You can do the following:

  • Use a portion of either a C char array or a C++ string.
  • Combine different sources of initialization data using operator+.
  • Use the string object?s substr( ) member function to create a substring.

Here?s a program that illustrates these features.

The string member function substr( ) takes a starting position as its first argument and the number of characters to select as the second argument. Both arguments have default values. If you say substr( ) with an empty argument list, you produce a copy of the entire string; so this is a convenient way to duplicate a string.

Here?s the output from the program:
What is
Elvis in a UFO
What is that one clam doing with Elvis in a UFO?

Notice the final line of the example. C++ allows string initialization techniques to be mixed in a single statement, a flexible and convenient feature. Also notice that the last initializer copies just one character from the source string.

Another slightly more subtle initialization technique involves the use of the string iterators string::begin( ) and string::end( ). This technique treats a string like a container object (which you?ve seen primarily in the form of vector. which uses iterators to indicate the start and end of a sequence of characters. In this way you can hand a string constructor two iterators, and it copies from one to the other into the new string:

#include <string>
#include <iostream>
#include <cassert>
using namespace std;

int main() {
string source(“xxx”);
string s(source.begin(), source.end());
assert(s == source);
} ///:~

The iterators are not restricted to begin( ) and end( ); you can increment, decrement, and add integer offsets to them, allowing you to extract a subset of characters from the source string.
C++ strings may not be initialized with single characters or with ASCII or other integer values. You can initialize a string with a number of copies of a single character, however.