7.3. Extracting characters from a string¶
Strings are called “strings” because they are made up of a sequence, or string, of characters. Imagine a string of beads, where each character is a bead in the string.
The first operation we are going to perform on a
string is to extract one of the characters. C++ uses square brackets
([
and ]
) for this operation.
Take a look at the active code below. We extract the character
at index 1 from string fruit
using [
and ]
.
The expression fruit[1]
indicates that I want character number 1
from the string named fruit
. The result is stored in a char
named letter
.
When I output the value of letter
, I get a surprise:
r
r
is not the first letter of "orange"
.
Unless you are a computer scientist.
Programmers (and most programming languages) always start
counting from zero.
The 0th letter (“zeroeth”) of "orange"
is o
.
The 1th letter (“oneth”) is r
and the 2th (“twoeth”) letter is
a
.
Note
In C++, indexing begins at 0!
If you want the zereoth letter of a string, then you have to put zero in the square brackets.
The active code below accesses the first character in string fruit
.
- 1
- Don't forget that computer scientists do not start counting at 1!
- 0
- Yes, this would access the letter 'b'.
- 2
- This would access the letter 'k'.
Q-3: What would replace the “?” in order to access the letter ‘b’ in the string below?
1#include <string>
2
3int main () {
4 std::string bake = "bake a cake!";
5 char letter = bake[?];
6}
- lunch
- When we
cout
astring
we print its content not its name. - jello
- Carefully check which string(s) we are indexing into.
- lello
- Correct! We copy the 'l' from position 3 of "hello" to position 0.
- heljo
- Consider which string(s) we are indexing into.
Q-4: What is printed when the code below is run?
1#include <iostream>
2#include <string>
3
4int main () {
5 std::string lunch = "hello";
6 std::string person = "deejay";
7 lunch[0] = lunch[3];
8 std::cout << lunch;
9}
int main() { string fruit = "apple"; char letter = fruit[2]; cout << fruit << endl; cout << fruit[4] << endl; }
Construct a block of code that correctly prints the letter “a”.