Mega Code Archive

 
Categories / C++ Tutorial / STL Algorithms Non Modifying Sequence Operations
 

Extract sentences from a vector of chars with help from find_if()

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