string
sIn addition to the constructors we covered in § 3.2.1 (p. 84) and to the constructors that string
shares with the other sequential containers (Tables 9.3 (p. 335)) the string
type supports three more constructors that are described in Table 9.11.
The constructors that take a string
or a const char*
take additional (optional) arguments that let us specify how many characters to copy. When we pass a string
, we can also specify the index of where to start the copy:
const char *cp = "Hello World!!!"; // null-terminated array
char noNull[] = {'H', 'i'}; // not null terminated
string s1(cp); // copy up to the null in cp; s1 == "Hello World!!!"
string s2(noNull,2); // copy two characters from no_null; s2 == "Hi"
string s3(noNull); // undefined: noNull not null terminated
string s4(cp + 6, 5);// copy 5 characters starting at cp[6]; s4 == "World"
string s5(s1, 6, 5); // copy 5 characters starting at s1[6]; s5 == "World"
string s6(s1, 6); // copy from s1 [6] to end of s1; s6 == "World!!!"
string s7(s1,6,20); // ok, copies only to end of s1; s7 == "World!!!"
string s8(s1, 16); // throws an out_of_range exception
Ordinarily when we create a string
from a const char*
, the array to which the pointer points must be null terminated; characters are copied up to the null. If we also pass a count, the array does not have to be null terminated. If we do not pass a count and there is no null, or if the given count is greater than the size of the array, the operation is undefined.
When we copy from a string
, we can supply an optional starting position and a count. The starting position must be less than or equal to the size of the given string
. If the position is greater than the size, then the constructor throws an out_of_range
exception (§ 5.6, p. 193). When we pass a count, that many characters are copied, starting from the given position. Regardless of how many characters we ask for, the library copies up to the size of the string
, but not more.
substr
OperationThe substr
operation (described in Table 9.12) returns a string
that is a copy of part or all of the original string
. We can pass substr
an optional starting position and count:
string s("hello world");
string s2 = s.substr(0, 5); // s2 = hello
string s3 = s.substr(6); // s3 = world
string s4 = s.substr(6, 11); // s3 = world
string s5 = s.substr(12); // throws an out_of_range exception
The substr
function throws an out_of_range
exception (§ 5.6, p. 193) if the position exceeds the size of the string
. If the position plus the count is greater than the size, the count is adjusted to copy only up to the end of the string
.