Strings often contain characters that represent numbers. For example, we represent the numeric value 15 as a string
with two characters, the character '1'
followed by the character '5'
. In general, the character representation of a number differs from its numeric value. The numeric value 15 stored in a 16-bit short
has the bit pattern 0000000000001111
, whereas the character string "15"
represented as two Latin-1 char
s has the bit pattern 0011000100110101
. The first byte represents the character '1'
which has the octal value 061, and the second byte represents '5'
, which in Latin-1 is octal 065.
The new standard introduced several functions that convert between numeric data and library string
s:
int i = 42;
string s = to_string(i); // converts the int i to its character representation
double d = stod(s); // converts the string s to floating-point
Here we call to_string
to convert 42
to its corresponding string
representation and then call stod
to convert that string
to floating-point.
The first non-whitespace character in the string
we convert to numeric value must be a character that can appear in a number:
string s2 = "pi = 3.14";
// convert the first substring in s that starts with a digit, d = 3.14
d = stod(s2.substr(s2.find_first_of("+-.0123456789")));
In this call to stod
, we call find_first_of
(§ 9.5.3, p. 364) to get the position of the first character in s
that could be part of a number. We pass the substring of s
starting at that position to stod
. The stod
function reads the string
it is given until it finds a character that cannot be part of a number. It then converts the character representation of the number it found into the corresponding double-precision floating-point value.
The first non-whitespace character in the string
must be a sign (+
or -
) or a digit. The string
can begin with 0x
or 0X
to indicate hexadecimal. For the functions that convert to floating-point the string
may also start with a decimal point (.
) and may contain an e
or E
to designate the exponent. For the functions that convert to integral type, depending on the base, the string
can contain alphabetic characters corresponding to numbers beyond the digit 9.