Extract sentences from a vector of chars with help from find_if(). : find if « STL Algorithms Non modifying sequence operations « C++ Tutorial






#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cctype>

using namespace std;

bool is_sentence_start(char ch);
template<class InIter>
void show_range(const char *msg, InIter start, InIter end);

int main()
{
  vector<char> v;
  vector<char>::iterator itr;
  const char *str = "this is a test";

  for(unsigned i=0; i < strlen(str); i++)
    v.push_back(str[i]);

  show_range("Contents of v: ", v.begin(), v.end());
  cout << endl;

  vector<char>::iterator itr_start, itr_end;

  itr_start = v.begin();
  do {
    itr_start = find_if(itr_start, v.end(), is_sentence_start);

    itr_end = find_if(itr_start, v.end(), is_sentence_start);

    show_range("", itr_start, itr_end);
  } while(itr_end != v.end());

  return 0;
}

// Return true if ch is the first letter in a sentence.
bool is_sentence_start(char ch) {
  static bool endofsentence = true;

  if(isalpha(ch) && endofsentence ) {
    endofsentence = false;
    return true;
  }

  if(ch=='.' || ch=='?' || ch=='!') endofsentence = true;
  return false;
}

template<class InIter>
void show_range(const char *msg, InIter start, InIter end) {
  InIter itr;
  cout << msg << endl;

  for(itr = start; itr != end; ++itr)
    cout << *itr;
  cout << endl;
}








25.7.find if
25.7.1.Use find_if to find first element divisible by 3
25.7.2.Use find_if to find first element greater than 3
25.7.3.map: find_if
25.7.4.std::find_if with predicate
25.7.5.Demonstrate the find() and find_if() algorithms.
25.7.6.Find value in a vector with find_if
25.7.7.Extract sentences from a vector of chars with help from find_if().