#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;
}