Skip to main content

How To Think Like a Computer Scientist C++ Edition The Pretext Interactive Version

Section 7.8 Our own version of find

If we are looking for a letter in a string, we may not want to start at the beginning of the string. One way to generalize the find function is to write a version that takes an additional parameter—the index where we should start looking. Here is an implementation of this function.
size_t find(string s, char c, size_t i) {
  while (i < s.length()) {
    if (s[i] == c)
      return i;
    i = i + 1;
  }
  return string::npos;
}
Instead of invoking this function on an string, like the first version of find, we have to pass the string as the first argument. The other arguments are the character we are looking for and the index where we should start.
Listing 7.8.1. In this active code , we are finding the number of 'e' characters in the “Shepard” part of “German Shepard” using our function. Then we use the built-in find function to demonstrate how they work differentlsssy.

Checkpoint 7.8.1.

What is the correct output of the code below?
int main() {
  string quote = "The way to get started is to quit talking and begin doing.";
  cout << find(quote, 't', 11) << ", " << find(quote, 't', 42) << ", " << quote.find('t');
}
  • 13, string::npos, 8
  • Notice how the built-in find function works differently from ours.
  • 13, 0, 7
  • Remember that when a character isn’t found, the function returns string::npos.
  • 13, string::npos, 0
  • Keep in mind that the find function is case sensitive, so ‘A’ is different from ‘a’.
  • 14, string::npos, 9
  • Remember that indexing begins at 0 for C++.
You have attempted 1 of 3 activities on this page.